只保存最后一项,同时快速保存核心数据[重复]

Posted

技术标签:

【中文标题】只保存最后一项,同时快速保存核心数据[重复]【英文标题】:only saving last item while saving in core data swift [duplicate] 【发布时间】:2016-08-16 14:18:26 【问题描述】:

使用这个功能,我想在core-data 实体中添加属性,但它只会重复保存最后一项。

我做错了什么?

 func SetFeaturedValues(Array : NSArray)
        let appDelegate =
            UIApplication.sharedApplication().delegate as! AppDelegate

    let managedContext = appDelegate.managedObjectContext
    let entity =  NSEntityDescription.entityForName("FeaturedJob",
                                                    inManagedObjectContext:managedContext)
    let FeaturedJob = NSManagedObject(entity: entity!,
                                      insertIntoManagedObjectContext: managedContext)

    print("array is \(Array)")
    for i in Array
        if let rowData :NSDictionary = i as? NSDictionary
            FeaturedJob.setValue(rowData["company"], forKey: "company")
            FeaturedJob.setValue(rowData["city"], forKey: "city")
            FeaturedJob.setValue(rowData["id"], forKey: "id")
            FeaturedJob.setValue(rowData["user_logo"], forKey: "user_logo")
            FeaturedJob.setValue(rowData["title"], forKey: "title")



        do 
            try managedContext.save()
            self.Featured.append(FeaturedJob)
            print("featured job is \(FeaturedJob)")
            //                people.append(person)

         catch let error as NSError  
            print("Could not save \(error), \(error.userInfo)")
        
        
    


【问题讨论】:

你能分享一下你core_data.model的快照吗 【参考方案1】:

好的,所以这仍然可以进行一些整理,但是...

问题在于您只创建了一个名为FeaturedJobNSManagedObject 实例。每次遍历数组时,都会附加它的值并保存它。但它是同一个例子!这就是为什么只有一个实例被保存的原因。

因此,在开始赋值之前,将带有 let let FeaturedJob = ... 的行放在 if 块中。这样你每次都会得到一个新的。

PS:每次迭代都会保存上下文。您可能只想在函数结束时执行一次。

【讨论】:

谢谢 :),我没有得到你的最后建议。 所以,最后一件事是 managedContext.save 调用在循环中,该循环正在迭代并将实体添加到上下文中。每个实体都被单独保存。储蓄是昂贵的,所以最后只做一次。不用担心,同时上下文会保留新实体,因此您可以一次保存它们。 它现在工作正常。但是当我重新启动应用程序时遇到另一个问题,我发现核心数据中没有数据。

以上是关于只保存最后一项,同时快速保存核心数据[重复]的主要内容,如果未能解决你的问题,请参考以下文章

php实现不能同时登陆

Core Data 只保存最后一项

Vue unshift 只重复最后一项

一对多关系核心数据只保存最后一个对象。其他人不见了

RestKit 仅保存响应数组中的最后一项

mongoose中Documents的save方法