2013-01-31 72 views
0

我找不到为什么排序NSArrayDBMetadata (NSObject)不起作用。这是我的代码。哪里不对?我甚至尝试添加一个类别来添加compare:,但它不起作用。按属性排序自定义对象的NSArray - DBMetadata - Dropbox

- (void)restClient:(DBRestClient *)client loadedMetadata:(DBMetadata *)metadata { 
    if (metadata.isDirectory) { 
     NSLog(@"Folder '%@' contains:", metadata.path); 
     for (DBMetadata *file in metadata.contents) { 
      NSLog(@"\t%@ is directory? %d", file.filename, file.isDirectory); 
      if (file.isDirectory) { 
       [self.availableBackups addObject:file]; 
       DLog(@"llastModifiedDate %@", file.lastModifiedDate); 
      } 
     } 
    } 
// NSLog(@"before sorting: %@", self.availableBackups); //lastModifiedDate //filename 

    NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"lastModifiedDate" ascending:YES selector:@selector(compare:)]; 
    [self.availableBackups sortedArrayUsingDescriptors:[NSArray arrayWithObjects:descriptor,nil]]; 

// NSLog(@"after sorting: %@", self.availableBackups); 
} 

self.availableBackupsNSMutableArray

@property (nonatomic, retain) NSMutableArray *availableBackups; 

的Dropbox - DBMetadata.h

评论NSLog只是打印obj的地址,你可以看到地址的输出仍然不管YES或分选后的同一NO for ascending:

输出

2013-01-31 17:20:12.423 Dropbox[7366:c07] before sorting: (
    "<DBMetadata: 0x6bbf010>", 
    "<DBMetadata: 0x6bbfb50>", 
    "<DBMetadata: 0x6bc1660>", 
    "<DBMetadata: 0x6bc17b0>", 
    "<DBMetadata: 0x6bc14f0>", 
    "<DBMetadata: 0x6bc0dd0>", 
    "<DBMetadata: 0x6bc1de0>" 
) 
2013-01-31 17:20:12.424 Dropbox[7366:c07] after sorting: (
    "<DBMetadata: 0x6bbf010>", 
    "<DBMetadata: 0x6bbfb50>", 
    "<DBMetadata: 0x6bc1660>", 
    "<DBMetadata: 0x6bc17b0>", 
    "<DBMetadata: 0x6bc14f0>", 
    "<DBMetadata: 0x6bc0dd0>", 
    "<DBMetadata: 0x6bc1de0>" 
) 

与上升NO

Last Modified file at 0: 2013-01-30 08:00:22 +0000 
Last Modified file at 1: 2013-01-30 08:02:54 +0000 
Last Modified file at 2: 2013-01-31 09:08:26 +0000 
Last Modified file at 3: 2013-01-31 09:14:55 +0000 
Last Modified file at 4: 2013-01-31 09:14:08 +0000 
Last Modified file at 5: 2013-01-31 09:16:43 +0000 
Last Modified file at 6: 2013-01-31 10:36:13 +0000 
+0

“就可以看到地址的输出仍然是相同的,不管选YES或后NO为升序:“输出在哪里? – WDUK

回答

0

sortedArrayUsingDescriptors:返回一个数组,它不会改变你申请它的阵列。如果您需要使用NSArray,尝试:

self.availableBackups = [self.availableBackups sortedArrayUsingDescriptors:[NSArray arrayWithObjects:descriptor,nil]];  

如果你可以使用NSMutableArray,你可以使用:

[self.availableBackups sortUsingDescriptors:[NSArray arrayWithObjects:descriptor,nil]];