CoreData 只保存最近插入的对象

Posted

技术标签:

【中文标题】CoreData 只保存最近插入的对象【英文标题】:CoreData only saving most recently inserted object 【发布时间】:2016-12-07 19:08:13 【问题描述】:

我正在尝试保存与添加到地图的图钉相关的数据。每次用户向地图添加图钉时,我都希望保存图钉的纬度、经度和标题。这是我的 savePin() 函数:

func savePin(location: BibleLocation) 

    let newPin = NSEntityDescription.insertNewObject(forEntityName: "Pin", into: context!) as! Pin
    newPin.setValue(location.lat, forKey: "lat")
    newPin.setValue(location.long, forKey: "long")
    newPin.setValue(location.name, forKey: "title")
    newPin.setValue(currentBook, forKey: "pinToBook")
    pinsForBook.append(newPin)

    appDelegate.saveContext()


问题是只有最近插入的 pin 会被 fetch 请求返回:

func getPinsForGlossary() 

    let request: NSFetchRequest<Pin> = Pin.fetchRequest()
    let p = NSPredicate(format: "pinToBook = %@", currentBook!)
    request.predicate = p

    pinsForBook = []
    do 
        let results = try context!.fetch(request as! NSFetchRequest<NSFetchRequestResult>)
        pinsForBook = results as! [Pin]
     catch let error as NSError 
        print("Could not fetch \(error), \(error.userInfo)")
    

我认为调用 insertNewObject 时不会覆盖数据。为什么只保存最近插入的对象?提前致谢。

【问题讨论】:

请在 Core Data 图表中显示您的对象之间的关系 我猜你是一对一的关系,所以当你将currentBook设置为一个对象的pinToBook时,会自动设置为前一个对象的nil。跨度> 就是这样!我以为我已经建立了关系,但我没有谢谢! 【参考方案1】:

我猜你有一个一对一的关系,所以当你将currentBook设置为一个对象的pinToBook时,它会在前一个对象中自动设置为nil

如果是这种情况,您应该将关系设置为一对多,以便一本书可以在多个Pin 对象中作为pinToBook 值使用。

【讨论】:

以上是关于CoreData 只保存最近插入的对象的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 中将 CoreData 保存/同步到 iCloud

CoreData 合并插入

核心数据 - 无法获取,没有先插入

认识CoreData—初识CoreData

在看似随机的列表位置插入 CoreData 对象

将观察者保存在 CoreData 对象上的干净方法?