pau*_*kow 3 cocoa cocoa-touch nssortdescriptor nsorderedset
执行此代码时:
NSSortDescriptor *sortDescriptor = [Characteristic sortDescriptor];
[workingSet sortUsingComparator:[sortDescriptor comparator]];
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
*** -[NSMutableOrderedSet sortUsingComparator:]: comparator cannot be nil
Run Code Online (Sandbox Code Playgroud)
sortDescriptor 是非零,所以我不知道为什么这不起作用.
我可以使用下面的代码解决问题,它完美地运行:
NSSortDescriptor *sortDescriptor = [Characteristic sortDescriptor];
NSArray *workingArray = [[workingSet array] sortedArrayUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];
workingSet = [NSMutableOrderedSet orderedSetWithArray:workingArray];
Run Code Online (Sandbox Code Playgroud)
查看NSArray参考,了解两种方法之间的区别
第一种方法的典型用法是这样的
NSArray *sortedArray = [array sortedArrayUsingComparator: ^(id obj1, id obj2) {
if ([obj1 integerValue] > [obj2 integerValue]) {
return (NSComparisonResult)NSOrderedDescending;
}
if ([obj1 integerValue] < [obj2 integerValue]) {
return (NSComparisonResult)NSOrderedAscending;
}
return (NSComparisonResult)NSOrderedSame;
}];
Run Code Online (Sandbox Code Playgroud)
(来自Apple的例子)
第二种方法更像是:
NSSortDescriptor *nameSort = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];
NSArray *sortDescriptors = [NSArray arrayWithObject:nameSort];
NSArray *sortedArray = [array sortedArrayUsingDescriptors:sortDescriptors];
Run Code Online (Sandbox Code Playgroud)