]> err.no Git - sope/blobdiff - sope-core/EOControl/EOSortOrdering.m
64bit fixes
[sope] / sope-core / EOControl / EOSortOrdering.m
index 93d2c01dab8bfc8a70955256f19674b98691d517..1611e7057e4325db99bab295a23dec96e9fdbc26 100644 (file)
@@ -121,23 +121,30 @@ EOControl_DECLARE SEL EOCompareCaseInsensitiveDescending =
 
 - (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])];
 }
@@ -188,8 +195,8 @@ static int keyOrderComparator(id o1, id o2, EOSortOrderingContext *context) {
     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;
@@ -202,7 +209,7 @@ static int keyOrderComparator(id o1, id o2, EOSortOrderingContext *context) {
     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;