ios - NSFetchedResultsController 排序错误

标签 ios nsfetchedresultscontroller

我正在开发一个基于 Xcode 的 CoreData 示例的项目。我有一个名为 Entity 的实体类,它带有一个 updated 键,它存储实体更新的时间戳,并且 NSFetchResultsController 设置为按降序排序:

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:[NSEntityDescription entityForName:@"Entity" inManagedObjectContext:_managedObjectContext]];
[fetchRequest setFetchBatchSize:20];
[fetchRequest setSortDescriptors:@[[[NSSortDescriptor alloc] initWithKey:@"updated" ascending:NO]]];

NSFetchedResultsController *frc = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:_managedObjectContext sectionNameKeyPath:nil cacheName:nil];

这在初始加载时工作正常,但是当我插入一个应该插入到其他对象之间的 NSManagedObject 时,它被插入到顶部。当我重新启动该应用程序时,它会插入到正确的位置。

例如:最初表格看起来像:

updated: 300
updated: 200
updated: 100

当我插入一个 ManagedObject: updated: 250 时,我希望表格看起来像这样:

updated: 300
updated: 250 <-- inserted here
updated: 200
updated: 100

但这就是我得到的:

updated: 250 <-- inserted at the top
updated: 300
updated: 200
updated: 100

这是 NSFetchResultsController 的工作方式,还是有任何方法可以在每次插入时重新排序所有 NSManagedObjects?谢谢:)

最佳答案

我自己的回答

NSManagedObject 有它的方法isUpdated,所以用键名 updated 的实体是无效的。

Methods you Must Not Override

NSManagedObject itself customizes many features of NSObject so that managed objects can be properly integrated into the Core Data infrastructure. Core Data relies on NSManagedObject’s implementation of the following methods, which you therefore absolutely must not override: primitiveValueForKey:, setPrimitiveValue:forKey:, isEqual:, hash, superclass, class, self, isProxy, isKindOfClass:, isMemberOfClass:, conformsToProtocol:, respondsToSelector:, managedObjectContext, entity, objectID, isInserted, isUpdated, isDeleted, ...

http://developer.apple.com/library/ios/#documentation/cocoa/Reference/CoreDataFramework/Classes/NSManagedObject_Class/Reference/NSManagedObject.html

关于ios - NSFetchedResultsController 排序错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17781666/

相关文章:

ios - 我怎么知道 UITableView 何时完成重新加载

iphone - Core Data 支持带有索引的 UITableView

ios - 过滤 NSFetchedResultsController 结果 swift 2

ios - NSFetchedResultsController didChangeObject indexPath 为空

ios - 使用带有 GUI 用户请求的 iOS 应用程序连接到 WiFi,而不是以编程方式

ios - 体系结构 i386 的 undefined symbol : _FlutterMethodNotImplemented

ios - UITableViewCell 作为进度指示器

ios - 如何上传用户个人资料图片

ios - 在 viewWillDisappear 中将 FetchedResultsController 设置为 nil 后出现错误

ios - CoreDataBooks 问题断言失败。