我基本上操作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]);
}
}
答案 0 :(得分:2)
如果要将数组保存在实体的transform able属性中,那么将保存订单 - 如果将数组设置回托管对象实例。
如果数组是托管对象实例的获取列表,则该数组的顺序不表示任何内容,也不会保存。如果要保存此订单,则需要在上下文中添加(和更新)其他一些数据。这可能是实体上的order
属性,也可能是具有有序关系的其他实体。
答案 1 :(得分:2)
如果您没有使用有序关系,则无法保证订单。
您可以设置要订购的关系。在这种情况下,您将不得不处理NSOrderedSet和不同的附件方法。 iOS5及更高版本中提供此功能。 Here是Ash Furrow(伟大的开发人员,很荣幸见到他)的精彩文章,涵盖了Core Data中的有序关系。
另一方面,您可以在访问数据后订购数据。在我的例子中,我有一个NSArray属性,一旦被访问,将获得NSSet中的所有对象并对它们进行排序。这种方法的缺点是每次向关系添加新的NSManagedObject时,提到的NSArray都将过时,必须重新创建。