【发布时间】:2016-11-16 06:23:53
【问题描述】:
在当前项目中,我有一组使用 Core Data 存储的对象。 现在我需要向 DataModel 添加一个字段。
我已添加它,创建了新的映射模型,将其设置为当前并成功迁移到新的数据模型。一切正常,但是..我的数据顺序丢失了。 由于某些奇怪的原因,以前的开发人员没有为数据模型创建任何 order 属性,并且在获取数据时会自动排序(我相信按 id..)
使用映射模型迁移到新数据模型后,每次迁移后我都会对数据进行随机排序。 并且一些与这些数据的顺序相关的应用逻辑现在被破坏了。
如何解决这个问题? 可以根据旧 ID 创建订单属性吗? 或者我如何使用 id 进行迁移?
已经花了一天时间解决这个问题,但没有找到解决方案。
非常感谢! 亚历克斯。
请求的检索数据代码:
NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"Area" inManagedObjectContext:[self context]];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entityDescription];
NSError *error;
return [[[self context] executeFetchRequest:request error:&error] mutableCopy];
【问题讨论】:
-
您能否发布有关如何检索数据的代码?
-
@jjatie 当然,将其添加到问题文本中
-
您没有提供
NSSortDescriptor或NSPredicate来限制和排序结果。您需要这样做才能为您提供managedObjectContext排序结果。 -
@jjatie 感谢您的建议!我没有可以对这些数据进行排序的属性。在迁移之前,它按照插入的顺序返回,并且这种行为是正确的。我相信它是按内部数据 ID 排序的。迁移后数据以随机顺序插入。第一个记录可以是一次迁移后的第 3 个记录,也可以是另一个迁移后的第 2 个记录。我的目标是通过在迁移之前引入一些基于数据顺序的排序属性并使用它来保持当前顺序,或者按照数据顺序进行迁移。
-
你之前很幸运,结果以与插入相同的顺序返回;对此没有任何保证。如果您需要按日期排序,请拥有一个日期属性并为其创建一个排序描述符。您可以按任何存在的属性进行排序。
标签: objective-c iphone swift xcode core-data