【发布时间】:2012-02-04 05:13:16
【问题描述】:
我在使用 NSFetchedResultsController 和 iOS 5 中可用的新 NSOrderedSet 关系时遇到问题(老实说是理解问题)。
我有以下数据模型(好吧,我真正的不是抽屉和袜子!)但这只是一个简单的例子:
Drawer 和 Sock 都是 Core Data 模型/存储中的 NSManagedObjects。在Drawer 上,socks 关系是与Sock 的有序对多 关系。这个想法是袜子按特定顺序放在抽屉里。在Sock 上,drawer 关系与socks 关系相反。
在 UIViewController 中,我正在绘制基于这些实体的 UITableView。我正在使用NSFetchedResultsController 喂桌子。
- (NSFetchedResultsController *)fetchedResultsController1 {
if (_fetchedResultsController1 != nil) {
return _fetchedResultsController1;
}
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Sock" inManagedObjectContext:[NSManagedObjectContext MR_defaultContext]];
[fetchRequest setEntity:entity];
NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"drawer.socks" ascending:YES];
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]];
self.fetchedResultsController1 = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:[NSManagedObjectContext MR_defaultContext] sectionNameKeyPath:nil cacheName:@"SocksCache"];
self.fetchedResultsController1.delegate = self;
return _fetchedResultsController1;
}
当我运行它时,我得到以下错误:*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'to-many key not allowed here'
这对我来说很有意义,因为关系是 NSOrderedSet,而不是单个实体进行比较以进行排序。
我想要实现的是Socks 以socks 关系中指定的顺序出现在UITableView 中。我真的不想有一个排序顺序,但是NSFetchedResultsController,这是一个很棒的组件,它坚持必须有一个。我如何告诉它在抽屉实体上使用袜子订单。我根本不希望表格显示抽屉实体。
注意:我仅在 iOS5 应用程序中使用它,因此可以使用有序关系。
任何可以为我提供任何方向的人,将不胜感激。感谢您的宝贵时间。
编辑: 所以显示袜子的表格视图只对一个抽屉这样做。我只想让表格视图遵守 socks 关系包含的顺序。我不确定要设置什么排序标准来确保发生这种情况。
【问题讨论】:
-
达米安,你似乎已经解决了这个问题。当您说“按照
socks关系中指定的顺序”时 - 您如何指定关系的顺序?在编辑器中,我只能看到一个复选框(已排序或未排序),但无法控制排序标准。 -
@jhabbott。当您指定有序关系(使用复选框)时,该关系由 NSOrderedSet 表示。然后你可以使用通常的有序集合方法来控制顺序。
-
好的,现在我开始使用生成的
insertObject:inSocksAtIndex:方法,但是我得到了一个无法识别的选择器异常。我认为托管对象上下文会在运行时添加它? -
@jhabbott 每个人都是如此,但这似乎是 Apple 长期存在的错误。在stackoverflow.com/questions/7385439/… 中查看'LeeIII' 的答案你必须自己实现这样的方法,直到错误被修复(并且它已经存在多年了!)
-
可以理解。有序关系在 Core Data 中承诺并交付的很少。我真的希望他们工作得更好。
标签: iphone objective-c ios core-data ios5