2013-03-11 34 views
0

我有一个iOS 6.1应用程序,它采用Core Data模型以及一些有序关系。它的下一个版本应该支持iCloud。但是,iCloud在基于SQLite的Core Data模型中不允许ordered relationshipsiCloud中基于SQLite的核心数据中的有序关系

在这种情况下,苹果是否有任何有关如何重构模型的建议,或者您是否已经获得了实践经验?我在类A和B之间有一对多的关系,例如A1到B1,B2和A2到B2,B3,所以给B添加一个索引属性不会有帮助。我可能必须引入一个新的C类,它与A和B之间有一对一的关系(例如C1到A1和B1),但是如果可能的话,希望避免这种情况。

顺便说一句,如果我用原来的核心数据模型与iCloud的我遇到下面的那种多个错误信息,我以为是由于有序关系的存在:

ERROR: this process has called an NSArray-taking method, such as initWithArray:, and passed in an NSSet object. This is being worked-around for now, but will soon cause you grief.

回答

1

我加入到对象属性命名顺序。

我有一些与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; 
     } 
    } 
} 
+0

+1和THX,但是这不会帮助如果一个图片可以包含在几个订单(如我的例子:B2包含在A1和A2中)。在这种情况下,您需要为每个Foto的订单存储更多的属性值,所以问题是如何做到这一点。毕竟,我目前倾向于添加一个像OrderToFotos这样的新类(或者例子中的C)。 – Drux 2013-03-13 08:28:45