CoreData仅保存最近插入的对象

时间:2016-12-07 19:08:13

标签: ios core-data nsmanagedobject

我正在尝试保存与添加到地图的引脚相关联的数据。每次用户将引脚添加到地图时,我都希望保存引脚的纬度,长度和标题。这是我的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()

}

问题是,只有最近插入的引脚才会被提取请求返回:

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时,我认为我没有覆盖数据。为什么只保存最近插入的对象?提前谢谢。

1 个答案:

答案 0 :(得分:0)

我猜您有一对一关系,因此当您将currentBook设置为一个对象的pinToBook时,它会自动设置为{{1}在前一个。

如果是您的情况,则应将关系设置为一对多,以便可以在多个nil对象中使用一本书作为{{1} }值。