索引[i]处的获取对象具有无序部分名称'å

时间:2013-08-14 18:51:13

标签: objective-c core-data ios6 nsfetchedresultscontroller

Error fetching: Error Domain=NSCocoaErrorDomain Code=134060 

"The operation couldn’t be completed. (Cocoa error 134060.)" 
UserInfo=0x132eb960 {reason=The fetched object at index 76 
has an out of order section name 'å. Objects must be sorted by section name'}

我检查过并且还有其他同名的问题,但是在这种情况下,由于变音字母符号而出现问题。

- (NSFetchedResultsController *)fetchedResultsControllerWithPredicate:
(NSPredicate *)aPredicate {
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSManagedObjectContext *localContext = [NSManagedObjectContext MR_contextForCurrentThread];

    fetchRequest.entity = [Word MR_entityDescription];

    [fetchRequest setFetchBatchSize:20];
    [fetchRequest setPredicate:aPredicate];

    NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"name"
                                                                     ascending:YES
                                                                      selector:@selector(localizedCompare:)];

    fetchRequest.sortDescriptors = @[sortDescriptor];

    NSFetchedResultsController *aFetchedResultsController =
    [[NSFetchedResultsController alloc]
     initWithFetchRequest:fetchRequest
     managedObjectContext:localContext
     sectionNameKeyPath:@"name.stringGroupByFirstInitial" cacheName:nil];

    aFetchedResultsController.delegate = self;

    NSError *anyError = nil;
    if (![aFetchedResultsController performFetch:&anyError]) {
        NSLog(@"Error fetching: %@", anyError);
    }

    return aFetchedResultsController;
}

如果我将localizedCompare:替换为compare:,则不会出现提取错误, 但是有些索引的顺序错误,并且没有显示任何部分。

1 个答案:

答案 0 :(得分:3)

不幸的是,本身不是解决方案......

localizedCompare:不会返回与使用自己的本地化比较实现从获取请求返回到SQLite支持的持久存储的结果相同的结果。当遇到“不寻常”的角色时,这一点尤其明显。

角色Æ是另一个向系统投掷扳手的角色,许多冰岛语和斯堪的纳维亚语言角色也是如此。我两年来一直在反对这个问题,但无济于事。

否则,只要您没有这些“不寻常”字符,它就会很好用。我的解决方法是检测错误,将sectionNameKeyPath设置为nil,然后强制重新获取。不理想,也不高效,但比用户什么也看不见。