- (id)initWithKeyValueUnarchiver:(EOKeyValueUnarchiver *)_unarchiver {
if ((self = [super init]) != nil) {
+ NSString *s;
+
self->key = [[_unarchiver decodeObjectForKey:@"key"] copy];
- self->selector =
- NSSelectorFromString([_unarchiver decodeObjectForKey:@"selector"]);
+
+ if ((s = [_unarchiver decodeObjectForKey:@"selector"]) != nil)
+ self->selector = NSSelectorFromString(s);
+ else if ((s = [_unarchiver decodeObjectForKey:@"selectorName"]) != nil) {
+ if (![s hasSuffix:@":"]) s = [s stringByAppendingString:@":"];
+ self->selector = NSSelectorFromString(s);
+ }
}
return self;
}
- (void)encodeWithKeyValueArchiver:(EOKeyValueArchiver *)_archiver {
[_archiver encodeObject:[self key] forKey:@"key"];
[_archiver encodeObject:NSStringFromSelector([self selector])
- forKey:@"selector"];
+ forKey:@"selectorName"];
}
/* description */
- (NSString *)description {
return [NSString stringWithFormat:
- @"<0x%08X[%@]: key=%@ selector=%@>",
+ @"<0x%p[%@]: key=%@ selector=%@>",
self, NSStringFromClass([self class]),
[self key], NSStringFromSelector([self selector])];
}
key = [context->orderings[i] key];
sel = [context->orderings[i] selector];
- v1 = [o1 valueForKey:key];
- v2 = [o2 valueForKey:key];
+ v1 = [o1 valueForKeyPath:key];
+ v2 = [o2 valueForKeyPath:key];
if (v1 == v2)
result = NSOrderedSame;
else if ((ccmp = (void *)[v1 methodForSelector:sel]))
result = ccmp(v1, sel, v2);
else
- result = (int)[v1 performSelector:sel withObject:v2];
+ result = (unsigned long)[v1 performSelector:sel withObject:v2];
if (result != NSOrderedSame)
return result;