如何覆盖核心数据中的数据?如何解决Core Data中的重复数据?

Posted

技术标签:

【中文标题】如何覆盖核心数据中的数据?如何解决Core Data中的重复数据?【英文标题】:how to override data in core data ? how to solve duplicate data in Core Data? 【发布时间】:2016-05-06 03:14:23 【问题描述】:

我正在从服务器获取数据,然后将所有数据保存到 Core Data。 但是当我保存它时,它会创建多个副本(重复数据)。

我的问题是:

    如何处理Core Data中的重复数据?

    如何在 CoreData 中使用 Swift 保存覆盖数据?

【问题讨论】:

嗨点心三清!欢迎来到堆栈溢出。你试过什么?你得到什么错误?请详细说明您的问题以及您尝试过的内容以及在什么平台上,以便我们有更好的机会准确回答。 【参考方案1】:

要在核心数据中保存新数据,您可以从核心数据中删除所有记录,然后您可以将所有记录保存在核心数据中。

这是从核心数据中删除所有记录的功能。您可以在将记录保存到核心数据之前调用此函数。

 func deleteEverything()
 
    let appDel = UIApplication.sharedApplication().delegate as! AppDelegate
    let context = appDel.managedObjectContext
    let coord = appDel.persistentStoreCoordinator

    let fetchRequest = NSFetchRequest(entityName: "Categorytbl") // Your entity name
    if #available(ios 9.0, *)
    
        let deleteRequest = NSBatchDeleteRequest(fetchRequest: fetchRequest)
        do
        
            try coord.executeRequest(deleteRequest, withContext: context)
        
        catch let error as NSError
        
            debugPrint(error)
        
    
    else
    
        // Fallback on earlier versions
        do
            let fetchedObjects : NSArray = try context.executeFetchRequest(fetchRequest)
            if(fetchedObjects.count > 0)
            
                for currObj in fetchedObjects
                
                    context.deleteObject(currObj as! NSManagedObject)
                
                let _ : NSError! = nil
                do 
                    try context.save()
                 catch 
                    print("Error in Deletion : \(error)")
                
            
        
        catch let error as NSError
        
            debugPrint(error)
        
    

我也有同样的问题。它在我的最后工作正常。

【讨论】:

【参考方案2】:
EXAMPLE :  

 let fetchReq = NSFetchRequest(entityName: "Theater")
    var array =  [Theater]()
    fetchReq.returnsObjectsAsFaults = false
    do 
        let obj = try moc.executeFetchRequest(fetchReq) as!  [Theater]
        for  details:Theater in obj


            array.append(details)
            print(details.movies)
        

     catch 
        print("Error in Fetching")
        return nil
    

你有在数组中存储对象

现在

    let obj:Theater = array[0] as! Theater
    //Update Record 
  do 
        try obj.managedObjectContext?.save()
     catch 
        print("Exception")
    

会更新记录

【讨论】:

以上是关于如何覆盖核心数据中的数据?如何解决Core Data中的重复数据?的主要内容,如果未能解决你的问题,请参考以下文章

删除时如何手动管理Core Data关系

如何使用更新的数据刷新 NSManagedObject - Core Data

如何从Core Data中的字符串获取Processed字符串

如何将 Core Data 与引用的文件同步?

核心数据:如何删除关系中的实体

Swift:当 didSelectRowAtIndexPath 时如何更新 Core Data 中的数据?