CoreData:所需类型=城镇;给定类型=城镇 - 一对一关系的不可接受的值类型

时间:2015-12-15 11:11:47

标签: core-data model nsmanagedobject cloudkit nsmanagedobjectmodel

我正在挠头,因为几个小时后我仍然无法理解这一点。

我的核心数据模型中有2个实体:

  • 城镇
  • 餐厅

我已经将关系定义为一对多并且相反。 (是的,你已经拥有它,一个城镇可以有多家餐馆;)

我正在使用Core Data Stack来保存来自CloudKit和AlecrimCoreData库的元素。在从CloudKit获取内容的类中,我通过Alecrim创建了上下文:

let dataContext = DataContext()

然后我有一堆函数调用类函数来创建NSManagedObjects,如果需要的话

let town = Towns.createTownsFromCK(record, dataContext: self.dataContext) ...
let restaurant = Restaurants.createRestaurantFromCK(record, dataContext: self.dataContext) ...

如您所见,我将dataContext传递给每个调用,因此对于餐馆和城镇来说也是如此。在城镇本地保存后,CloudKit餐馆对象被抓住。

try dataContext.save()

let restaurantPredicate = NSPredicate(format: "town == %@", record.recordID)
let restaurantQuery = CKQuery(recordType: "Restaurants", predicate: restaurantPredicate)
self.publicDB.addOperation(createQueryOperation(restaurantQuery, cursor: nil, resultblock:fetchedRestaurantsRecord))

当抓住时,我可以创建餐厅NSManagedObjects并添加属性,但是当我想要链接城镇时,我在设置城镇时遇到一个奇怪的错误:

if let cktownreference = record["town"] as? CKReference,
        town = dataContext.towns.filter{ $0.ckid! == cktownreference.recordID.recordName }.first {
    restaurant.town = town
 }

错误:

  

由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'对于一对一关系的值不可接受的类型:property =“town”; 期望的类型=城镇;给定类型=城镇; value =(entity:Towns; id:0xd000000000080000; data:{       ckid =“6665ca0f-af57-4305-8e18-ced7540e6279”;       name = Paris;       recordChangeTag = ii0l38hp;       restaurant =“”;   })'

我试图创建一个新的上下文,我试图将Town设置为NSSet,结果相同。

这是我的餐厅架构:

Restaurant model & relationship

和镇:

Town model & relationship

我每个人都遇到同样的问题:我有很多链接。

0 个答案:

没有答案