在循环遍历数组时保存到CoreData

时间:2016-04-02 10:00:55

标签: ios swift core-data

从Web服务下载后,我得到了这个字符串"85:ABC ,83:CFD"。我需要将这些值存储到CoreData表TABLE_JOBTITLE中。我有以下代码

var designationDictionaryArray = results.componentsSeparatedByString(",")

var index: Int = 1
        for item in designationDictionaryArray
        {
            let appDelegate =
                UIApplication.sharedApplication().delegate as! AppDelegate

            let managedContext = appDelegate.managedObjectContext


            let entity =  NSEntityDescription.entityForName("TABLE_JOBTITLE",
                                                            inManagedObjectContext:managedContext)

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

            job.setValue(String(index), forKey: "column_Id")
            job.setValue(String(item.componentsSeparatedByString(":")[0]), forKey: "column_Server_Id")
            job.setValue(String(item.componentsSeparatedByString(":")[1]), forKey: "column_Job_Name")

            print("Column_Id")
            print(index)
            print("Column_Server_Id")
            print(String(item.componentsSeparatedByString(":")[0]))
            print("column_Job_Name")
            print(String(item.componentsSeparatedByString(":")[1]))


            do {
                try managedContext.save()
                print("saved job title")
            } catch let error as NSError  {
                print("Could not save \(error), \(error.userInfo)")
            }

            self.desiginationArray.append(item.componentsSeparatedByString(":")[1])
            index = index + 1
        }

我可以遍历每个数据,但是当我将它存储在表中时...它会像下面一样存储

coulmn_Id          column_ServerId    column_Job_Title              
1                        83                  CFD
1                        83                  CFD

任何人都可以帮我纠正这个奇怪行为的纠正代码或原因。

2 个答案:

答案 0 :(得分:1)

我怀疑两件事之一:

  1. 结果中的值与预期不符。
  2. 检查输出的方式有误。
  3. 我倾向于后者,因为我没有看到任何方式可以在一次运行中为两个实体分配相同的列ID。

    将断点放在最上方以检查结果的值以及从results.componentsSeparatedByString(",")返回的数组。

    显示您用于迭代表格的代码以进行检查。我敢打赌,你没有表现出真正的输出。循环中打印线的输出是多少?如果它看起来像这样:

    Column_Id
    1
    Column_Server_Id
    85
    column_Job_Name
    ABC
    Column_ID
    2
    Column_Server_ID
    83
    Column_ID
    CFD
    

    然后我会说,你肯定没有正确地从Core Data读回你的结果。让我们看看你在决赛桌上的位置。

答案 1 :(得分:0)

我不知道问题是同样的代码是否正常工作。