【问题标题】:NSFetchedResultsController Error: 'NSInvalidArgumentException', reason: '-[NSSortDescriptor countByEnumeratingWithState:objects:count:]:NSFetchedResultsController 错误:'NSInvalidArgumentException',原因:'-[NSSortDescriptor countByEnumeratingWithState:objects:count:]:
【发布时间】:2014-08-04 01:17:56
【问题描述】:

我正在尝试创建一个 NSFetchedResultsController 并请求从特定区域获取照片。我的核心数据中有两个模型 Region 和 Photo。以下是我收到错误的代码:

- (void)setRegion:(Region *)region
{
    _region = region;

    // Making a request for the particular region
    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Photo"];
    request.sortDescriptors = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES selector:@selector(localizedStandardCompare:)];
    request.predicate = [NSPredicate predicateWithFormat:@"fromRegion = %@", region];
    NSLog(@"%@", region.name);

    self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request
                                                                        managedObjectContext:[region managedObjectContext]
                                                                          sectionNameKeyPath:nil
                                                                                   cacheName:nil];
}

我收到以下错误:

-[NSSortDescriptor countByEnumeratingWithState:objects:count:]:无法识别的选择器发送到实例 0x8d67850

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:'-[NSSortDescriptor countByEnumeratingWithState:objects:count:]:无法识别的选择器发送到实例 0x8d67850'

我不明白为什么我会收到它。我所做的只是从包含特定区域的数据库中检索照片。但是,我在 self.fetchedResultsController 行上收到错误消息。这个包含这段代码的核心数据tableview控制器实际上是另一个核心数据tableview控制器的指定视图控制器。

我已经四处寻找其他解决方案,但它们只处理与循环遍历 self.fetchedResultsController 相关的问题,而我没有这样做。我只在 fetchedResultsController 的表格视图中显示照片。

【问题讨论】:

    标签: ios objective-c core-data


    【解决方案1】:

    问题出在这里:

    request.sortDescriptors = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES selector:@selector(localizedStandardCompare:)];
    

    获取请求使用一组排序描述符,因为您可以提供多个。这就是为什么它是sortDescriptors 而不是sortDescriptor。您需要提供一个数组。一个简单的解决方法是更改​​该行以创建一个包含您的描述符的单元素数组:

    request.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES selector:@selector(localizedStandardCompare:)]];
    

    更多证据表明这是问题所在:countByEnumeratingWithState:objects:count: 是由NSFastEnumeration 协议定义的方法。由于NSArray 采用了该协议,因此有望实现该方法。但是由于NSSortDescriptor没有采用那个协议,所以也就没有那个方法了。

    【讨论】:

    • 你救了一天。我不敢相信我忘了做这样的事情。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多