【发布时间】:2020-07-16 14:08:28
【问题描述】:
代码是
let request: NSFetchRequest<NSFetchRequestResult> = Item.fetchRequest()
print(request)
Item 是 Core Data 的一个实体。
第一次执行正确,但再次执行时出现错误Thread 12: EXC_BAD_ACCESS (code=1, address=0x0)。
这是一个类似的question,但使用对象C。它说直接在视图控制器中定义managedObjectContext而不是从AppDelegate转移它可以修复错误。
在我的代码中,managedObjectContext 在SceneDelegate 中。
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
if let windowScene = scene as? UIWindowScene {
let context = CoreData.stack.context
let window = UIWindow(windowScene: windowScene)
window.rootViewController = UIHostingController(rootView: ContentView()
.environment(\.managedObjectContext, context)
.environmentObject(UserEnvironment())
)
self.window = window
window.makeKeyAndVisible()
}
}
和
import CoreData
class CoreData: NSObject {
static let stack = CoreData()
public var context: NSManagedObjectContext {
get {
return self.persistentContainer.viewContext
}
}
private lazy var persistentContainer: NSPersistentCloudKitContainer = {
let container = NSPersistentCloudKitContainer(name: "iCloud.com.xxxx")
container.loadPersistentStores(completionHandler: { (storeDescription, error) in
if let nserror = error as NSError? {
fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
}
})
container.viewContext.automaticallyMergesChangesFromParent = true
container.viewContext.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy
return container
}()
}
那么如何修复 Swift 中的 bug?谢谢。
【问题讨论】:
-
你能显示
CoreData.stack的代码吗?我觉得它只是被摧毁了,因为本地。 -
我已经添加了代码和一个演示项目,用于重现链接所附的错误。
标签: ios objective-c swift core-data swiftui