Mic*_*bob 3 xcode core-data ios swift swiftui
当我尝试传入预览 Core Data 对象时,Xcode 的预览画布不断崩溃,没有错误消息,如下所示:
import SwiftUI
import CoreData
struct BookView: View {
let book: Book
var body: some View {
Text("Hello, World!")
}
}
// ^^^ This stuff is fine ^^^
// vvv This stuff is not vvv
struct BookView_Previews: PreviewProvider {
static let moc = NSManagedObjectContext(concurrencyType: .mainQueueConcurrencyType)
static var previews: some View {
let book = Book(context: moc)
book.title = "Test book"
book.author = "Test author"
book.genre = "Fantasy"
book.rating = 4
book.review = "This was a great book; I really enjoyed it."
return NavigationView {
BookView(book: book)
}
}
}
Run Code Online (Sandbox Code Playgroud)
我正在关注有关 Core Data 和 SwiftUI 的 Hacking with Swift 教程,并且正在执行此步骤。
这似乎是将预览对象添加到 SwiftUI 画布的标准方法,但我无法让它工作。仅供参考,该应用程序在模拟器中运行良好,我只是想让它也能在预览画布中工作。我在 macOS 12 上使用 Xcode 13.2.1。
谢谢你!
而不是创建一个NSManagedObjectContext用途
static let context = PersistenceController.preview.container.viewContext
Run Code Online (Sandbox Code Playgroud)
该变量在标准 Xcode 项目中通过 Core Data 提供。
另外,如果您一直使用真实商店进行预览,它可能会以某种方式损坏,因此您可能必须销毁。
添加下面的代码
do{
try container.persistentStoreCoordinator.destroyPersistentStore(at: container.persistentStoreDescriptions.first!.url!, type: .sqlite, options: nil)
}catch{
print(error)
}
Run Code Online (Sandbox Code Playgroud)
就在下面
container = NSPersistentCloudKitContainer(name: "YourAppName")
Run Code Online (Sandbox Code Playgroud)
在加载商店之前。
这会破坏存储,然后在您调用时重新创建它,loadPersistentStores请务必在清除预览设备后删除该代码段,这样您就不会意外破坏另一个您不想破坏的存储。
| 归档时间: |
|
| 查看次数: |
2138 次 |
| 最近记录: |