无法对自定义对象的NSMutableArray进行排序

时间:2013-02-25 16:13:33

标签: objective-c ios6

我在尝试对自定义对象数组进行排序时遇到了问题。它看起来好像我的数组甚至没有点击排序代码,而只是简单地返回数组本身。

我有以下设置:

SearchResult : NSObject
--
Document : SearchResult
Tag : SearchResult
Folder : SearchResult

我的代码收到的回复为SearchResult,然后尝试将它们全部与name实施中定义的密钥SearchResult进行比较。

-(void) parseFolderContents:(NSDictionary *) data
{
NSMutableArray *searchResults = [[NSMutableArray alloc] init];
NSMutableArray *documents = [[NSMutableArray alloc] init];
NSMutableArray *folders = [[NSMutableArray alloc] init];
NSMutableArray *tags = [[NSMutableArray alloc] init];
NSArray *results = [data objectForKey:@"items"];
for (int i = 0; i < [results count]; i++)
{
    SearchResult *result = (SearchResult *)[KTParser parseSearchResult:[results objectAtIndex:i]];
    if ([result.type isEqualToString:@"document"]){
        [documents addObject:result];
    }
    else if ([result.type isEqualToString:@"folder"])
    {
        [folders addObject:result];
    }
    else if ([result.type isEqualToString:@"tag"])
    {
        [tags addObject:result];
    }
}
if ([documents count] > 0)
    [searchResults addObject:documents];
if ([folders count] > 0)
    [searchResults addObject:folders];
if ([tags count] > 0)
    [searchResults addObject:tags];

....

这就是用于填充数组的代码,这不是什么特别的东西。我已经尝试了这些方法中的每一种来比较数组。没有人工作过。有谁知道我哪里出错了?

首次尝试:

NSSortDescriptor *sortDescriptor;
sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name"
                                             ascending:YES];    
NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
NSArray *sortedResults;
sortedResults = [searchResults sortedArrayUsingDescriptors:sortDescriptors];

第二次尝试:

NSArray *sortedResults;
sortedResults = [searchResults sortedArrayUsingSelector:@selector(compare:)];

(implementing custom compare method on SearchResult/Document.m)
- (NSComparisonResult)compare:(SearchResult *)otherResult{
  return [self.name compare:otherResult.name];
}

第三次尝试:

    sortedResults = (NSMutableArray *)[searchResults sortedArrayUsingDescriptors:[NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES selector:@selector(caseInsensitiveCompare:)]]];

第四次尝试我尝试使用一个块。我甚至尝试将代码放入操作它的排序,这也没有用。返回的数组与原始数组完全相同:

sortedArray = [searchResults sortedArrayUsingComparator:^NSComparisonResult(id a, id b) {
    if ([(SearchResult *)a itemId] < 20000 )
        return NSOrderedAscending;
    else
        return NSOrderedDescending;
}];

有人有什么想法吗?

1 个答案:

答案 0 :(得分:0)

发现问题 - 我将数组添加为对象,而不是将每个对象添加到数组中。然后在NSArray上调用sort,而不是我的自定义对象。将上述代码从[searchResults addObject:documents];更改为[searchResults addObjectsFromArray:documents];解决了这个问题!