在iCloud中基于SQLite的Core Data中的有序关系

时间:2013-03-11 11:28:18

标签: ios core-data icloud

我有一个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对象。这是   现在已经解决了,但很快就会让你感到悲伤。

1 个答案:

答案 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;
        }
     }
}