我有一个iOS 6.1应用程序,它使用Core Data模型和一些有序关系。它的下一个版本应该支持iCloud。但是,iCloud不允许在基于SQLite的Core Data模型中使用ordered relationships。
Apple是否有关于如何在这种情况下重构模型的建议,或者您是否获得了实践经验?我在A和B类之间有一对多的关系,例如A1到B1,B2和A2到B2,B3,所以只需在B中添加索引属性就无济于事了。我可能不得不引入一个新的C类,它与A和B有一对一的关系(例如C1到A1和B1),但如果可能的话,我想避免这种情况。
顺便说一句,如果我使用iCloud的原始核心数据模型,我会遇到以下类型的多条错误消息,我认为这是由于存在有序关系:错误:此过程调用了NSArray-taking方法,例如 initWithArray:,并传入一个NSSet对象。这是 现在已经解决了,但很快就会让你感到悲伤。
答案 0 :(得分:1)
我添加了名为order的对象属性。
我有一些与FotoContent对象有“toMany”关系的对象。 FotoContent具有名为“url”的属性和属性“order”。在我的项目中,我需要通过url名称对它们进行排序。 所以,让我们这样做:
//没有“复制”方法,您将收到错误消息
NSMutableArray *fotosToOrder = [[[object fotos] copy]mutableArrayValueForKey:@"url"];
//sort new array by url attribute
[fotosToOrder sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
NSComparisonResult res = [(NSString*) obj1 caseInsensitiveCompare:(NSString *) obj2];
return res;
}];
//go through all sorted urls and add Order value to Fotos objects
int order = 0;
for (NSString *sortedFotoURL in fotosToOrder){
for (FotoContent *unsortedFoto in object.fotos){
if ([sortedFotoURL isEqualToString:unsortedFoto.url]){
unsortedFoto.order = order;
order++;
break;
}
}
}