gpt4 book ai didi

ios - 核心数据 : Correct way to update within a NSUrlRequest

转载 作者:行者123 更新时间:2023-11-28 16:05:54 25 4
gpt4 key购买 nike

我有一个 NSUrlRequest,我在其中调用方法 User.updateMyObject(id: NSNumber, name: String)。对象 User 具有静态属性:

static let appDelegate = UIApplication.shared.delegate as! AppDelegate
static let MOC = appDelegate.managedObjectContext

以及更新/创建/删除对象的几种方法。

现在,我读到你不应该在不同的线程上使用你的MOC。据我所知, NSUrlRequest 是异步运行的。然后我将如何调用 MyObject.updateMyObject(id: NSNumber, name: String)

我有时会收到错误:

CoreData: error: Serious application error.  Exception was caught during Core Data change processing.  This is usually a bug within an observer of NSManagedObjectContextObjectsDidChangeNotification.  -[__NSCFSet addObject:]: attempt to insert nil with userInfo (null)
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFSet addObject:]: attempt to insert nil'

我的请求是这样的:

let session = URLSession.shared
// The singleton shared session is for basic requests.
// Data tasks send and receive data using NSData objects.
// Data tasks are intended for short, often interactive requests to a server.
let task = session.dataTask(with: request) {
(data: Data?, response: URLResponse?, error: Error?) in

//JSon parsing
MyObject.updateMyObject(id: NSNumber, name: String)
}
task.resume()

MyObject.updateMyObject(id: NSNumber, name: String) 看起来像这样:

static func updateMyObject(id: NSNumber, name: String) {
let request: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest(entityName: "MyObject")
let resultPredicate = NSPredicate(format: "id = \(id)")
request.predicate = resultPredicate

do {
let result = try User.MOC.fetch(request).first as! MyObject

result.name = name

User.appDelegate.saveContext()
}
catch {
print("User.updateMyObject: error.")
}
}

最佳答案

这就是 NSManagedObjectContext 上存在 performperformAndWait 方法的原因——这样您就可以在不同的线程上安全地使用上下文。您应该在这里使用其中之一。

一般来说,任何时候你接触任何与 Core Data 相关的东西,你都需要将该代码包装在对这两种方法之一的调用中。这些方法以闭包作为参数;将您的核心数据代码放入该闭包中。此规则的唯一异常(exception)是,如果您使用 mainQueueConcurrencyType 并且您知道您的代码正在主队列上运行。

关于ios - 核心数据 : Correct way to update within a NSUrlRequest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40285436/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com