在 SwiftUI 预览中模拟核心数据对象
Mock Core Data object in SwiftUI Preview
Xcode 的预览 canvas 在我尝试像这样传入预览 Core Data 对象时一直崩溃且没有错误消息:
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)
}
}
}
我正在关注关于核心数据和 SwiftUI 的 Hacking with Swift 教程,我在 this step。
这似乎是将预览对象添加到 SwiftUI canvas 的标准方法,但我无法让它工作。仅供参考,该应用程序在模拟器中运行良好,我只是想让它在预览中也能正常工作 canvas。我在 macOS 12 上使用 Xcode 13.2.1。
谢谢!
而不是创建 NSManagedObjectContext
使用
static let context = PersistenceController.preview.container.viewContext
标准 Xcode 核心数据项目中提供了该变量。
此外,如果您一直在使用真实商店进行预览,它可能会以某种方式损坏,因此您可能不得不销毁。
添加下面的代码
do{
try container.persistentStoreCoordinator.destroyPersistentStore(at: container.persistentStoreDescriptions.first!.url!, type: .sqlite, options: nil)
}catch{
print(error)
}
正下方
container = NSPersistentCloudKitContainer(name: "YourAppName")
加载商店之前。
这会破坏商店,然后在您调用时重新创建它 loadPersistentStores
请务必在清除预览设备后删除那段代码,以免意外破坏您不是故意的另一个商店摧毁。
Xcode 的预览 canvas 在我尝试像这样传入预览 Core Data 对象时一直崩溃且没有错误消息:
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)
}
}
}
我正在关注关于核心数据和 SwiftUI 的 Hacking with Swift 教程,我在 this step。
这似乎是将预览对象添加到 SwiftUI canvas 的标准方法,但我无法让它工作。仅供参考,该应用程序在模拟器中运行良好,我只是想让它在预览中也能正常工作 canvas。我在 macOS 12 上使用 Xcode 13.2.1。
谢谢!
而不是创建 NSManagedObjectContext
使用
static let context = PersistenceController.preview.container.viewContext
标准 Xcode 核心数据项目中提供了该变量。
此外,如果您一直在使用真实商店进行预览,它可能会以某种方式损坏,因此您可能不得不销毁。
添加下面的代码
do{
try container.persistentStoreCoordinator.destroyPersistentStore(at: container.persistentStoreDescriptions.first!.url!, type: .sqlite, options: nil)
}catch{
print(error)
}
正下方
container = NSPersistentCloudKitContainer(name: "YourAppName")
加载商店之前。
这会破坏商店,然后在您调用时重新创建它 loadPersistentStores
请务必在清除预览设备后删除那段代码,以免意外破坏您不是故意的另一个商店摧毁。