首页 > 解决方案 > SwiftUI Core Data NSManagedObjectContext“无法识别的选择器发送到实例”错误

问题描述

在视图模型中,我尝试调用两个函数,其中一个创建新列表“addNewList”,在该函数中,我创建一个新的子列表“addMainSublist”,如下面的代码所示,“addNewList”函数完美运行。此外,当我尝试在“addNewList”中调用“addMainSublist”时,当我尝试在 CoreData 中保存新子列表时,“PersistenceController”文件中显示的照片中的错误,我在 SwiftUI 视图中调用“addNewList”并采用“moc " SwiftUI 视图中“@Environment(.managedObjectContext) private var managedObjectContext”属性的参数。

注意:正如您在下面的代码中看到的,我使用相同的“managedObjectContext”来保存新列表和新子列表,当我删除模拟器中的所有内容并尝试创建新列表时,错误没有显示,但在第二次尝试再次显示错误。

    func addNewList(moc: NSManagedObjectContext, mainLists: FetchedResults<ListOfTasks>, favoriteLists: FetchedResults<ListOfTasks>) {
    
    let newList = ListOfTasks(context: moc)
    newList.id = UUID()
    newList.addedDate = addedDate
    newList.title = title
    newList.icon = icon
    newList.color = Color.set(stringfor: color)
    newList.origin_Group = origin_Group
    if origin_Group == nil {
        newList.state = ListState.list.rawValue
        newList.index = Int16(mainLists.count)
        newList.isFavorite = isFavorite
        newList.favoriteIndex = Int16(isFavorite ? favoriteLists.count : 0)
    }else{
        if let wrappedGroup = origin_Group {
            newList.state = ListState.sublist.rawValue
            newList.index = Int16(wrappedGroup.listsArray.count-1)
            newList.isFavorite = false
            newList.favoriteIndex = 0
        }
    }
    newList.isLocked = isLocked
    newList.isArchived = isArchived
    
    PersistenceController.shared.save()
    
    addMainSublist(to: newList, moc: moc)

}


func addMainSublist(to newList: ListOfTasks, moc: NSManagedObjectContext) {
    
    let mainSublist = Sublist(context: moc)
    mainSublist.origin_List = newList
    mainSublist.id = UUID()
    mainSublist.addedDate = Date()
    mainSublist.index = 0
    mainSublist.title = "\(title)_MainSublist"
    mainSublist.isExpanded = false
    mainSublist.isArchived = false
            
    PersistenceController.shared.save()
}

错误照片

在此处输入图像描述

标签: swiftcore-dataswiftui

解决方案


Joakim Danielson 的回答给了我关于“比较”的注释,问题是使用排序描述“list.title”来获取 SwiftUI 视图中的所有子列表进行调试,当我更改错误消失时,感谢“ Joakim Danielson”,感谢他的宝贵笔记。


推荐阅读