相关疑难解决方法(0)

自定义选择器用于NSSortDescriptor和NSFetchedResultsController

我遇到了一些麻烦,我想知道是否有人可以提供一些指导.

我试图按以下顺序创建节标题:["推","忙","完成","取消"].

不幸的是,这个订单无法通过简单的"升序YES/NO"来实现......我必须添加一个自定义比较选择器......这样的事情......:

**"状态"映射到["推","忙","完成","取消"]

NSSortDescriptor *sortStates = [NSSortDescriptor sortDescriptorWithKey:@"states"
                                                           ascending:NO 
                                                            selector:@selector(compareCustom:)];
Run Code Online (Sandbox Code Playgroud)

因此,我实现了一个"compareCustom"...然而,事实证明我无法实现自定义排序器,因为以下异常结果:

***由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'不支持的NSSortDescriptor选择器:compareCustom:'

作为参考,sortDate通过以下方式实现:

request.sortDescriptors = @[sortStates]
self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request
                                                                    managedObjectContext:context
                                                                    sectionNameKeyPath:@"states"
                                                                               cacheName:nil];
Run Code Online (Sandbox Code Playgroud)

所以看起来我无法实现一个返回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 …
Run Code Online (Sandbox Code Playgroud)

core-data objective-c ios

6
推荐指数
2
解决办法
3426
查看次数

标签 统计

core-data ×1

ios ×1

objective-c ×1