swift - 保存到 CoreData 一次后,我收到错误“无法识别的选择器发送到实例”
问题描述
问题是我第一次后无法再次保存到 Core Data。根据类似的问题,它可能与 FetchRequest (ContentView) 中的 SortDescriptor 有关,但我无法弄清楚要进行哪些更改。帮助将不胜感激。谢谢
编辑:不幸的是,另一个问题不起作用,它是从 7 年前开始的,甚至在 swift 存在之前,我无法申请/没有帮助。
编辑:我已经删除了二进制数据的排序,但错误仍然存在
核心数据 xcdatamodeld 文件:
img:二进制数据日期:字符串
我收到错误:
-[_PFExternalReferenceData compare:]:无法识别的选择器发送到实例 0x600003c35810 与 userInfo (null)
这是 CameraView 组件,其中 ViewContext.save() 发生,触发错误:
struct CameraView: View {
@Environment(\.managedObjectContext) private var viewContext
@State private var showSheet: Bool = false
@State private var showImagePicker: Bool = false
@State private var sourceType: UIImagePickerController.SourceType = .camera
@State private var image: UIImage?
var body: some View {
ZStack {
VStack{
Button(action: saveImage, label: {
Text("Save Image")
}).foregroundColor(.black)
Image(uiImage: image ?? UIImage(named: "placeholder")!)
.resizable()
.frame(width:300, height: 300)
Button("Choose Picture") {
self.showSheet = true
}.foregroundColor(.black)
.padding()
.actionSheet(isPresented: $showSheet) {
ActionSheet(title: Text("Select Photo"),
message: Text("Choose"),
buttons:[
.default(Text("Photo Library")) {
self.showImagePicker = true
self.sourceType = .photoLibrary
},
.default(Text("Camera")) {
self.showImagePicker = true
self.sourceType = .camera
},
.cancel()
]
)
}
}.sheet(isPresented: $showImagePicker, onDismiss: loadImage){
ImagePicker(image: self.$image, isShown: self.$showImagePicker, sourceType: self.sourceType)
}
}
.navigationTitle("Take a Picture")
.navigationBarTitleDisplayMode(.inline)
.padding(0)
}
func saveImage () {
print("saving to jpegData")
let pickedImage = image?.jpegData(compressionQuality: 1.0)
let drawing = Drawing(context: viewContext)
let date = Date()
let format = DateFormatter()
format.dateFormat = "yyyy-MM-dd HH:mm:ss"
let formattedDate = format.string(from: date)
drawing.img = pickedImage
drawing.date = "Sun 2 May"
print(pickedImage!)
do {
try viewContext.save()
print("Image is saved")
} catch {
print(error.localizedDescription)
}
}
}
这是我的应用程序视图,我将 managedObjectContext 环境传递给 ContentView:
struct Draw_DailyApp: App {
let persistenceController = PersistenceController.shared
@Environment(\.scenePhase) var scenePhase
@State var showOrderSheet = false
// Creating a global environment and placing it into the environment
@ObservedObject var searchObjectController: SearchObjectController = SearchObjectController()
var body: some Scene {
WindowGroup {
ContentView()
.environment(\.managedObjectContext, persistenceController.container.viewContext)
.environmentObject(self.searchObjectController)
}
.onChange(of: scenePhase) { _ in
persistenceController.save()
}
}
}
调用 FetchRequest 的内容视图。它由选项卡视图组成,然后相机是主视图内的导航链接(但我不认为这是这里的问题)
struct ContentView: View {
init() {
UITabBar.appearance().backgroundColor = UIColor.purple
}
@FetchRequest(entity: Drawing.entity(),
sortDescriptors: [
NSSortDescriptor(keyPath: \Drawing.img, ascending: true), NSSortDescriptor(keyPath: \Drawing.date, ascending: true)
]
)
var orders: FetchedResults<Drawing>
var body: some View {
List {
ForEach(orders, id: \.self, content: { drawing in
Text(drawing.date ?? "Unknown")
})
}
TabView {
MoodboardView()
.tabItem{
Label("mood", systemImage: "lightbulb")
}
HomeView()
.tabItem{
Label("home", systemImage: "list.dash")
}
SketchbookView()
.tabItem{
Label("sketchbook", systemImage: "pencil")
}
TipsView()
.tabItem{
Label("tips", systemImage: "book")
}
}.accentColor(.white)
}
}
我在发布此问题之前尝试过的类似问题似乎要求调用堆栈,所以请告诉我是否应该在此处提供
解决方案
@Joakin Danielson 我真诚地道歉。我删除了错误的行。核心数据 FetchRequest 现在工作正常,因为我删除了二进制数据上的行排序。非常感谢,非常感谢!
推荐阅读
- css - 为什么我从教程中复制的 CSS 动画不起作用?
- r - 循环变量以生成余额表
- c# - 使用 ssh.net 我无法获得输出
- r - 考虑到它们之间的相似性,将行分组
- javascript - How to filter an array of objects, based on some fields?
- css - Blazor 模板在侧边栏右侧绘制一条红线
- java - Firebase 身份验证电子邮件
- java - 使用 IN 对象列表将 Oracle SQL 查询转换为 Spring JPA
- .net - 如何在后台线程中正确分离 HttpContect?
- eclipse-hono - 通过 hono 将事件从边缘设备发送到同上