Ios 核心数据在更新旧对象时创建新对象
首先,我不相信这是(它在Obj-C中,他们每次分离时都调用insertNewObject)的重复 背景信息:我从RayWenderlich的书中学习了如何使用CoreData,并在编写此代码时参考了它。如果你有这本书的话,我会按照第三章中的概述滚动我自己的自定义堆栈。如果需要,我可以显示此代码 队列是我试图更新的实体 它有1个属性:name-String 一对多关系:任务:任务 我的CoreData逻辑位于包含managedContext的结构中 我有一个基本的查找/创建函数来创建队列对象。这很有效。它创建1个对象,并且仅创建1个对象Ios 核心数据在更新旧对象时创建新对象,ios,swift,core-data,Ios,Swift,Core Data,首先,我不相信这是(它在Obj-C中,他们每次分离时都调用insertNewObject)的重复 背景信息:我从RayWenderlich的书中学习了如何使用CoreData,并在编写此代码时参考了它。如果你有这本书的话,我会按照第三章中的概述滚动我自己的自定义堆栈。如果需要,我可以显示此代码 队列是我试图更新的实体 它有1个属性:name-String 一对多关系:任务:任务 我的CoreData逻辑位于包含managedContext的结构中 我有一个基本的查找/创建函数来创建队列对象。这很
func findOrCreateMainQueue() -> Queue? {
let queue = Queue(context: managedContext)
queue.name = "Queue32"
let queueFetch: NSFetchRequest<Queue> = Queue.fetchRequest()
queueFetch.predicate = NSPredicate(format: "%K == %@", #keyPath(Queue.name), "Queue32" as CVarArg)
do {
let results = try managedContext.fetch(queueFetch)
print(results.count)
if results.count > 0 {
return results.first!
} else {
try managedContext.save()
}
} catch let error as NSError {
print("Fetch error: \(error) description: \(error.userInfo)")
}
return nil
}
为了节省空间,我不会为我尝试过的其他东西添加代码
- 我尝试过使用find/create函数并在该方法中进行更新李>
- 我尝试将队列保存为本地对象,并将其传递给addTask函数,这也会导致重复
- 无论我是传入任务还是在addTask函数中创建一个任务,这都无关紧要
先谢谢你。我已经花了好几个小时的时间了。我承认我没有读过你所有的代码,但是如果你创建一个像这样的新托管对象
let queue = Queue(context: managedContext)
然后,它将被添加到managedContext
,并在某个时间保存到磁盘。所以这个代码
if results.count > 0 {
return results.first!
} else {
try managedContext.save()
}
与先前创建的队列
对象无关,因为即使结果为0,也会保存该对象。计数
大于0,但稍后会保存。因此,这意味着您必须在获取成功时删除队列
,这感觉不必要,最好等待创建它
if results.count > 0 {
return results.first!
} else {
let queue = Queue(context: managedContext)
queue.name = "Queue32"
try managedContext.save()
}
离题,但如果创建了新对象而不是获取了新对象,则返回nil,这是有意的吗?非常感谢。我假设在函数未调用save()时,“queue”值已被删除。
if results.count > 0 {
return results.first!
} else {
try managedContext.save()
}
if results.count > 0 {
return results.first!
} else {
let queue = Queue(context: managedContext)
queue.name = "Queue32"
try managedContext.save()
}