Core Data是否在NSMutableArray中保持对象的顺序?

时间:2014-01-14 20:38:31

标签: ios objective-c core-data nsmutablearray

我基本上操作NSMutableArray中的对象,该对象是从Core Data获取的。除了数组中对象的顺序之外,对这些对象的所有更改都保存在Core Data中。例如,当数组中的对象移动到它的末尾时,这似乎不会保存在Core Data中。是不是核心数据不能保持数组中对象的顺序?如果是这样,可以做些什么来解决它?排序

这是我获取数据的方式:

    NSError *error;
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription
                                   entityForName:@"Item" inManagedObjectContext:managedObjectContext];

    [fetchRequest setEntity:entity];
    self.items = [[managedObjectContext executeFetchRequest:fetchRequest error:&error] mutableCopy];

这就是我保存更改的方式:

- (void)saveCoreData{

    NSManagedObjectContext *context = [self managedObjectContext];

    NSError *error;
    if (![context save:&error]) {
        NSLog(@"Could not save data: %@", [error localizedDescription]);
    }

}

2 个答案:

答案 0 :(得分:2)

如果要将数组保存在实体的transform able属性中,那么将保存订单 - 如果将数组设置回托管对象实例。

如果数组是托管对象实例的获取列表,则该数组的顺序不表示任何内容,也不会保存。如果要保存此订单,则需要在上下文中添加(和更新)其他一些数据。这可能是实体上的order属性,也可能是具有有序关系的其他实体。

答案 1 :(得分:2)

如果您没有使用有序关系,则无法保证订单。

您可以设置要订购的关系。在这种情况下,您将不得不处理NSOrderedSet和不同的附件方法。 iOS5及更高版本中提供此功能。 Here是Ash Furrow(伟大的开发人员,很荣幸见到他)的精彩文章,涵盖了Core Data中的有序关系。

另一方面,您可以在访问数据后订购数据。在我的例子中,我有一个NSArray属性,一旦被访问,将获得NSSet中的所有对象并对它们进行排序。这种方法的缺点是每次向关系添加新的NSManagedObject时,提到的NSArray都将过时,必须重新创建。