致命错误:UnsafeRawBufferPointer 从 Core Data/NSFetchedResultsController 删除对象时计数为负

dha*_*ydl 8 macos appkit nsfetchedresultscontroller swift combine

这是我第一次使用 AppKit 和NSTableView. 它由NSFetchedResultsController核心数据支持。当数据集发生更改时,Notification将发送:

func controller(_ controller: NSFetchedResultsController<NSFetchRequestResult>, didChange anObject: Any, at indexPath: IndexPath?, for type: NSFetchedResultsChangeType, newIndexPath: IndexPath?) {
    guard let links = self.fetchedResultsController.fetchedObjects else {
        return
    }

    if self.viewContext.hasChanges {
        try? self.viewContext.save()
    }
        
    self._links = links
    NotificationCenter.default.post(name: .reloadLinkList, object: nil)
}
Run Code Online (Sandbox Code Playgroud)
NotificationCenter.default.publisher(for: .reloadLinkList).receive(on: RunLoop.main).sink { notification in
    self.list.tableView.reloadData()
    self.list.linksModel.selectedRows = IndexSet([])
}
.store(in: &cancellables)
Run Code Online (Sandbox Code Playgroud)

这对于插入和更新数据非常有用。当我尝试删除某些内容时,我得到:

Thread 1: Fatal error: UnsafeRawBufferPointer with negative count
Run Code Online (Sandbox Code Playgroud)

删除选定对象的代码如下:

Thread 1: Fatal error: UnsafeRawBufferPointer with negative count
Run Code Online (Sandbox Code Playgroud)
// selector methode for UIMenuItem`s action
@objc func onDeleteSelectedLinks(_ sender: AnyObject) {
    list.linksModel.deleteLinks(links: selectedLinks)
}
Run Code Online (Sandbox Code Playgroud)

感谢您提前提供的任何帮助!

小智 9

我在项目中工作时出错:

我在项目中工作时出错

我是如何解决这个问题的

步骤1:

步骤1

复制你的 coredata 的名称(如果你不知道,它的格式是“.xcdatamodeld”,在我的例子中。CoreDataOneToMany.xcdatamodeld)

第2步:

第2步

转到 DataController 文件(如果您不知道 DataController 是什么,它用于连接 swift ui 和 coredata ,如果需要,您可以参考 hacking with swift 的更多内容)

步骤3:

步骤3

检查名称两个名称是否相同(在我的情况下它不同,因此显示错误:“致命错误:UnsafeRawBufferPointer 具有负计数”)

错误已修复:

错误已修复

就我而言并成功构建,这可能对您有帮助