"-6ren"> "-PersonsArray: NSMutableArray = ( "", "", "", " (entity: Person; id: 0xd000000000040000 ; data: {\n -6ren">
gpt4 book ai didi

ios - CoreData删除Entry后,如何处理包含CoreData Entry的NSMutableArray,显示为 ""

转载 作者:搜寻专家 更新时间:2023-11-01 05:41:16 24 4
gpt4 key购买 nike

PersonsArray: NSMutableArray =

(
"<null>",
"<null>",
"<null>",
"<MyProject.Person: 0x7ffc5257d850> (entity: Person; id: 0xd000000000040000 <x-coredata://8DD0B78C-C624-4808-9231-1CB419EF8B50/Person/p1> ; data: {\n image = nil;\n name = dustin;\n})",
"<null>",
"<null>",
"<null>",
"<null>",
"<null>")

如果用户删除CoreData条目(实体:Person;name=dustin)

PersonsArray: NSMutableArray =

(
"<null>",
"<null>",
"<null>",
"<MyProject.Person: 0x7ffc5257d850> (entity: Person; id: 0xd000000000040000 <x-coredata://8DD0B78C-C624-4808-9231-1CB419EF8B50/Person/p1> ; data: <fault>)",
"<null>",
"<null>",
"<null>",
"<null>",
"<null>")

如何检查 PersonsArray 的索引槽包含这个 "<fault>"这样我就可以把它还给"<null>"


删除 tableView 中条目的代码(第二个 VC)

func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
switch editingStyle {
case .Delete:
appDel = UIApplication.sharedApplication().delegate as! AppDelegate
context = appDel.managedObjectContext!

//Could I do something like give VC2 the PersonsArray and here...
//ADD Something like
for ObjectIndex in 0..<PersonsArray.count {
if PersonsArray[ObjectIndex] === results[indexPath.row] {
PersonsArray[ObjectIndex] = NSNull()
}
}
// then continue with the delete?

context.deleteObject(results[indexPath.row] as! NSManagedObject)
context.save(nil)
self.viewDidLoad()
default:
return
}
}

最佳答案

确实没有简单的方法。正确的答案是……不要将 NSManagedObject 实例存储在数组中。在这种情况下使用 NSFetchedResultsController 等,或者重新获取对象以确定剩下的内容。

另一种选择是通过监听 NSManagedObjectContextDidSave 通知并在从上下文中删除对象时从数组中删除对象来手动维护数组。

使用 NSFetchedResultsController 通常更容易。

更新1

在您的主视图 Controller 中,您可以保存对 -objectID 的引用而不是对象。然后,当您尝试实现该对象时,如果它消失了,您将返回一个 nil。不漂亮,但可以工作。

然而,您的主视图 Controller 应该监听 NSManagedObjectContextDidSaveNotification 并且在该通知中是一个 -userInfo 并且该属性内部是三个 NSSet实例。一个包含所有已更新的对象,一个包含所有已插入的对象和所有已删除的对象。然后,您可以测试以查看删除的任何内容是否在您的数组中,并将它们从您的数组中删除。

关于ios - CoreData删除Entry后,如何处理包含CoreData Entry的NSMutableArray,显示为 "<fault>",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29956065/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com