NSFetchedResultsController和NSOrderedSet关系

Dam*_*ien 34 iphone core-data objective-c ios ios5

我在NSFetchedResultsController和iOS 5中提供的新NSOrderedSet关系中遇到了一个问题(理解问题).

我有以下数据模型(好吧,我的真实的不是抽屉和袜子!)但这只是一个简单的例子:

在此输入图像描述

Drawer和Sock都是Core Data模型/商店中的NSManagedObjects.上Drawersocks关系是一个有序的一对多关系Sock.想法是袜子按特定顺序放在抽屉里.上Sockdrawer关系是逆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;    
}
Run Code Online (Sandbox Code Playgroud)

当我运行它时,我得到以下错误: *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'to-many key not allowed here'

这对我来说很有意义,因为这种关系是一个NSOrderedSet而不是单个实体来进行比较以进行排序.

我想要实现的是按照关系中指定的顺序Socks出现.我真的不想要排序顺序但是,这是一个很好的组件,坚持必须有一个.如何告诉它在Drawer实体上使用socks命令.我不希望表格显示抽屉实体.UITableViewsocksNSFetchedResultsController

注意:我仅在iOS5应用程序中使用此功能,因此可以使用有序关系.

任何能为我提供任何指导的人都将不胜感激.谢谢你的时间.

编辑:所以显示袜子的tableview只对一个抽屉这样做.我只想让表视图遵守socks关系包含的顺序.我不确定如何设置排序标准以确保发生这种情况.

ado*_*oho 5

达米安,

您应该只NSFetchRequest使用有序集的数组形式.它会运作良好.您的控制器需要一个属性来排序.因此,您还需要指定它.

安德鲁

  • Damien,一个简单的谓词就是你所需要的.例如:`@"self in%@",orderedSet.array`.排序描述符应该同样简单 - 选择一个不会改变排序顺序的属性.安德鲁 (7认同)

Tom*_*iak 2

据我了解此功能,它允许Sock在每个Drawer. 正如苹果公司所写文档中所写的那样

\n\n
\n

仅当关系具有对其自身表示至关重要的内在排序\xe2\x80\x94(例如配方中的步骤)时,才应使用它们。

\n
\n\n

这意味着您无法Sock使用排序关系获取所有 s。Sorted Socks 仅在每个中可用Drawer

\n