iCloud 中基于 SQLite 的核心数据中的有序关系
Posted
技术标签:
【中文标题】iCloud 中基于 SQLite 的核心数据中的有序关系【英文标题】:Ordered relationships in SQLite-based Core Data in iCloud 【发布时间】:2013-03-11 11:28:18 【问题描述】:我有一个 ios 6.1 应用程序,它使用具有一些有序关系的 Core Data 模型。它的下一个版本应该支持 iCloud。但是,iCloud 不允许在基于 SQLite 的 Core Data 模型中使用ordered relationships。
Apple 对在这种情况下如何重构模型有任何建议,或者您是否获得了这方面的实践经验?我在 A 类和 B 类之间有一对多的关系,例如A1 到 B1、B2 和 A2 到 B2、B3,因此仅向 B 添加索引属性将无济于事。我可能必须引入一个与 A 和 B 一对一关系的新类 C(例如 C1 到 A1 和 B1),但如果可能的话,我想避免这种情况。
顺便说一句,如果我将原始核心数据模型与 iCloud 一起使用,我会遇到以下类型的多个错误消息,我认为这是由于存在有序关系:
ERROR:这个进程调用了一个NSArray-taken方法,比如 initWithArray:,并传入一个 NSSet 对象。这正在 暂时可以解决,但很快就会让你伤心。
【问题讨论】:
【参考方案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;
【讨论】:
+1 & thx,但是如果一张照片可以包含在多个订单中(如我的示例中:B2 包含在 A1 和 A2 中),这将无济于事。在这种情况下,您需要为每张照片存储超过属性值的订单,所以问题是如何做到这一点。毕竟,我目前倾向于添加像 OrderToFotos(或示例中的 C)这样的新类。以上是关于iCloud 中基于 SQLite 的核心数据中的有序关系的主要内容,如果未能解决你的问题,请参考以下文章