【发布时间】:2015-01-15 17:47:47
【问题描述】:
我遇到了一些麻烦,我想知道是否有人可以提供一些指导。
我正在尝试按以下顺序创建节标题:[“Push”、“Busy”、“Finished”、“Canceled”]。
不幸的是,这个顺序不能用简单的“升序是/否”来实现......我必须添加一个自定义比较选择器......像这样..:
**“states”映射到[“Push”、“Busy”、“Finished”、“Canceled”]
NSSortDescriptor *sortStates = [NSSortDescriptor sortDescriptorWithKey:@"states"
ascending:NO
selector:@selector(compareCustom:)];
因此,我实现了一个“compareCustom”......但是,事实证明我无法实现自定义排序器,因为以下异常结果:
*** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“不支持的 NSSortDescriptor 选择器:compareCustom:”
供参考,sortDate的实现方式为:
request.sortDescriptors = @[sortStates]
self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request
managedObjectContext:context
sectionNameKeyPath:@"states"
cacheName:nil];
所以看起来我无法实现返回 NSComparisonResult 的 compareCustom?我觉得这应该是可能的..但我无法弄清楚如何。如果有人可以提供一些建议,我将不胜感激!
也供参考,这里是我的“compareCustom”方法
-(NSComparisonResult)compareCustom:(NSString *)anotherState {
if ([(NSString *)self isEqualToString:@"Push"] && [anotherState isEqualToString:@"Canceled"]) {
return NSOrderedDescending;
}
else if ([(NSString *)self isEqualToString:@"Push"] && [anotherState isEqualToString:@"Busy"]) {
return NSOrderedDescending;
}
else if ([(NSString *)self isEqualToString:@"Push"] && [anotherState isEqualToString:@"Finished"]) {
return NSOrderedDescending;
}
else if ([(NSString *)self isEqualToString:@"Push"] && [anotherState isEqualToString:@"Push"]) {
return NSOrderedSame;
}
else if ([(NSString *)self isEqualToString:@"Finished"] && [anotherState isEqualToString:@"Canceled"]) {
return NSOrderedDescending;
}
else if ([(NSString *)self isEqualToString:@"Finished"] && [anotherState isEqualToString:@"Busy"]) {
return NSOrderedAscending;
}
else if ([(NSString *)self isEqualToString:@"Finished"] && [anotherState isEqualToString:@"Finished"]) {
return NSOrderedSame;
}
else if ([(NSString *)self isEqualToString:@"Finished"] && [anotherState isEqualToString:@"Push"]) {
return NSOrderedAscending;
}
else if ([(NSString *)self isEqualToString:@"Busy"] && [anotherState isEqualToString:@"Finished"]) {
return NSOrderedDescending;
}
else if ([(NSString *)self isEqualToString:@"Busy"] && [anotherState isEqualToString:@"Canceled"]) {
return NSOrderedDescending;
}
else if ([(NSString *)self isEqualToString:@"Busy"] && [anotherState isEqualToString:@"Busy"]) {
return NSOrderedSame;
}
else if ([(NSString *)self isEqualToString:@"Busy"] && [anotherState isEqualToString:@"Push"]) {
return NSOrderedAscending;
}
else {
return NSOrderedSame;
}
}
【问题讨论】:
标签: ios objective-c core-data