ios - 如何在核心数据中设置与对象的关系?

标签 ios xcode swift

我创建了两个关系实体。在我移动到另一个 UIViewController 之后,我将名称保存到第一个实体的属性中,并将数组元素按顺序保存到第二个实体的属性中。我让我可以看到节省的结果。我看到每个元素都与第一个实体有关系。在我返回第一个 UITableViewController 并移动到第二个 UITableViewController 后,它显示属于第一个实体的名称属性的元素。我在这里得到一个错误。我只有数组的最后一个元素。其他元素与第一个实体没有关系。我怎样才能重新制作它?请以编程方式向我展示它。

   let testArray = ["iMac", "Mac Pro", "MacBook Pro", "iPhone", "iPad"]
    @IBAction func saveData(sender: UIBarButtonItem) {
        for element in testArray {
            let personEntity = NSEntityDescription.insertNewObjectForEntityForName("Person", inManagedObjectContext: managedObjectContext) as! Person
            let carEntity = NSEntityDescription.insertNewObjectForEntityForName("Car", inManagedObjectContext: managedObjectContext) as! Car
            let object: AnyObject? = fetchedResultsController.fetchedObjects!.first
            let fixPersonEntity = object as! Person
            carEntity.personCar = element
            carEntity.personRelationship = fixPersonEntity
            println(carEntity)
            fixPersonEntity.setValue(Set(arrayLiteral: carEntity), forKey: "carRelationship")
            managedObjectContext.save(nil)
        }
        let storyboard = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle())
        let navi = storyboard.instantiateViewControllerWithIdentifier("navi") as! UINavigationController
        presentViewController(navi, animated: true, completion: nil)
    }

保存数组时控制台显示如下结果

<Car: 0x1702a60c0> (entity: Car; id: 0x170229660 <x-coredata:///Car/tB81E6F91-4479-409B-AF1F-07AE75E1826F4> ; data: {
    personCar = iMac;
    personRelationship = "0xd000000000040000 <x-coredata://833104DC-EFF4-412D-AFCB-186BA53725F4/Person/p1>";
})
<Car: 0x1702a2d00> (entity: Car; id: 0x17022e980 <x-coredata:///Car/tB81E6F91-4479-409B-AF1F-07AE75E1826F6> ; data: {
    personCar = "Mac Pro";
    personRelationship = "0xd000000000040000 <x-coredata://833104DC-EFF4-412D-AFCB-186BA53725F4/Person/p1>";
})
<Car: 0x1742a5400> (entity: Car; id: 0x174232500 <x-coredata:///Car/tB81E6F91-4479-409B-AF1F-07AE75E1826F8> ; data: {
    personCar = "MacBook Pro";
    personRelationship = "0xd000000000040000 <x-coredata://833104DC-EFF4-412D-AFCB-186BA53725F4/Person/p1>";
})
<Car: 0x1702a1fe0> (entity: Car; id: 0x170230240 <x-coredata:///Car/tB81E6F91-4479-409B-AF1F-07AE75E1826F10> ; data: {
    personCar = iPhone;
    personRelationship = "0xd000000000040000 <x-coredata://833104DC-EFF4-412D-AFCB-186BA53725F4/Person/p1>";
})
<Car: 0x1702a34e0> (entity: Car; id: 0x170232720 <x-coredata:///Car/tB81E6F91-4479-409B-AF1F-07AE75E1826F12> ; data: {
    personCar = iPad;
    personRelationship = "0xd000000000040000 <x-coredata://833104DC-EFF4-412D-AFCB-186BA53725F4/Person/p1>";
})

这是第二个 UITableViewController 中对象没有关系的例子

<Car: 0x1742a5580> (entity: Car; id: 0xd0000000000c0002 <x-coredata://833104DC-EFF4-412D-AFCB-186BA53725F4/Car/p3> ; data: {
    personCar = "MacBook Pro";
    personRelationship = nil;
})

最佳答案

我更改了代码,它对我有用

  let testArray = ["Zone", "Implicit", "Comma", "Department", "Define", "Provide"]
    @IBAction func saveData(sender: UIBarButtonItem) {
        for element in testArray {
            let personEntity = NSEntityDescription.insertNewObjectForEntityForName("Person", inManagedObjectContext: managedObjectContext) as! Person
            let carEntity = NSEntityDescription.insertNewObjectForEntityForName("Car", inManagedObjectContext: managedObjectContext) as! Car
            let object: AnyObject? = fetchedResultsController.fetchedObjects!.first
            var fixPersonEntity = object as! Person
            println(fixPersonEntity)
            carEntity.personCar = element
            carEntity.personRelationship = fixPersonEntity
            managedObjectContext.save(nil)
        }
        let storyboard = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle())
        let navi = storyboard.instantiateViewControllerWithIdentifier("navi") as! UINavigationController
        presentViewController(navi, animated: true, completion: nil)
    }

关于ios - 如何在核心数据中设置与对象的关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32347583/

相关文章:

ios - AVPlayer - 从本地 URL 播放

ios - ios中如何将scrollview的内容保存到照片库

ios - becomeFirstResponder 非常慢

objective-c - NSPredicate 中的多个条件

ios - 自定义 UITextField 清除按钮颜色为白色

iOS 9 导航栏平铺背景

ios - 在 iOS 7 后台模式下有效跟踪用户的问题

java - 如何通过 Selenium 将 Xcode 模拟器设置为以编程方式旋转到 iPhone/iPad 的横向

ios - 无法将文件添加到 Xcode

ios - 设置视频帧AVPlayer