如何在IOS Swift中获取Core数据中的多对多关系?

时间:2016-05-13 07:23:11

标签: ios swift core-data

我一直在尝试获取核心数据中多对多关系的关系值。 我有两个实体Person和Address。人可以有多个地址,它有两个属性Name&年龄。地址只有一个属性City。

以下是我尝试设置值的方法

let managedContext = (UIApplication.sharedApplication().delegate as? AppDelegate)!.managedObjectContext

let entity = NSEntityDescription.entityForName("Person", inManagedObjectContext: managedContext)
let addEntity = NSEntityDescription.entityForName("Address", inManagedObjectContext: managedContext)

let person = NSManagedObject(entity: entity!, insertIntoManagedObjectContext: managedContext)

let address = NSManagedObject(entity: addEntity!, insertIntoManagedObjectContext: managedContext)

person.setValue(name, forKey: "name")
person.setValue(age, forKey: "age")
address.setValue(city, forKey: "city")

person.setValue(NSSet(object: address), forKey: "addresses")

do {
    try person.managedObjectContext?.save()
    people.append(person)
} catch let error as NSError {
    print("Could not save \(error)")
}

这是我的核心数据属性的设置方式

extension Person {

   @NSManaged var age: NSNumber?
   @NSManaged var name: String?
   @NSManaged var addresses: Address?

}

extension Address {

   @NSManaged var city: String?
   @NSManaged var persons: Person?

}

然后在表视图中获取数据我正在尝试做类似这样的事情

let person = people[indexPath.row]
let address = person.mutableSetValueForKey("addresses")
print(address.allObjects.first as! Address)

印刷品的价值是这样的

<Address: 0x7f9481f1e290> (entity: Address; id: 0xd000000000040002 <x-coredata://7A4230B9-0EF0-44D5-BBDD-D8E9A3E38F59/Address/p1> ; data: <fault>)

任何帮助将不胜感激。提前谢谢。

2 个答案:

答案 0 :(得分:0)

检查它是否为关系(非属性)。并且很多。像这样: https://github.com/diego-gomez-olvera/RtlViewPager 在那之后,它会是这样的:

extension Album {

    @NSManaged var createDate: NSDate?
    @NSManaged var isDefault: NSNumber?
    @NSManaged var name: String?
    @NSManaged var order: NSNumber?
    @NSManaged var picture: NSData?
    @NSManaged var notes: NSOrderedSet? // Attention: NSOrderedSet

}

答案 1 :(得分:0)

您展示的模型不是您所声明的模型。您的模型显示错误命名的1:1关系。根据你的代码,你应该打赌会崩溃。

@NSManaged var addresses: Address?  // is not a 1:N

我建议您查看数据模型并重新生成代码。