gpt4 book ai didi

swift - 核心数据 EXC_BAD_ACCESS 删除时

转载 作者:行者123 更新时间:2023-11-28 07:36:42 24 4
gpt4 key购买 nike

从 Core Data 中删除对象时获取 EXC_BAD_ACCESS。任何想法如何解决问题?可能需要阅读一些核心数据原则(?)

func deleteEntity(_ entity : String) {

let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: entity)

print("Object count: \(context.registeredObjects.count)") // prints 0 here
do {
let results = try context.fetch(fetchRequest)
for managedObject in results {
let managedObjectData : NSManagedObject = managedObject as! NSManagedObject
if !managedObjectData.isDeleted{
context.delete(managedObjectData) // EXC_BAD_ACCESS here, fetch request returns 1 item here!
}
}
try context.save()
} catch let error {
print(error)
}
}




Crashed: com.apple.main-thread
0 CoreData 0x1114c7293 -[NSManagedObjectContext(_NSInternalAdditions) _registerObject:withID:] + 35
1 CoreData 0x1114c5569 -[NSManagedObjectContext(_NSInternalAdditions) _retainedObjectWithID:optionalHandler:withInlineStorage:] + 217
2 CoreData 0x1114d0512 _PF_FulfillDeferredFault + 882
3 CoreData 0x1114dfe9e _PF_Handler_Primitive_GetProperty + 110
4 CoreData 0x1114dfca3 -[NSManagedObject(_NSInternalMethods) _newPropertiesForRetainedTypes:andCopiedTypes:preserveFaults:] + 323
5 CoreData 0x1114dfb39 -[NSManagedObject(_NSInternalMethods) _newAllPropertiesWithRelationshipFaultsIntact__] + 89
6 CoreData 0x1114dfa2b -[NSManagedObjectContext(_NSInternalChangeProcessing) _establishEventSnapshotsForObject:] + 75
7 CoreData 0x1114f7168 -[NSManagedObjectContext deleteObject:] + 136

编辑: 上下文似乎有问题。我也曾尝试移除整个商店,但似乎还剩下一件商品,导致崩溃。这个特定的项目是稍后添加的,在不同的 View 中。可能跟人际关系有关。调试与-com.apple.CoreData.ConcurrencyDebug 1 堆栈跟踪还显示

“一个 NSManagedObject 只能在一个 NSManagedObjectContext 中(或被其观察到)。”

最佳答案

删除实体所有对象的常用方法是

func deleteEntity(_ entity : String) throws {
let fetchRequest = NSFetchRequest<NSManagedObject>(entityName: entity)
let results = try context.fetch(fetchRequest)
for managedObject in results {
context.delete(managedObject)
}

try context.save()
}

然而在 iOS 9+, macOS 10.11+ 中有更好的方法

func deleteEntity(_ entity : String) throws {
let fetchRequest = NSFetchRequest<NSManagedObject>(entityName: entity)
let deleteRequest = NSBatchDeleteRequest(fetchRequest: request as! NSFetchRequest<NSFetchRequestResult>)
let persistentStoreCoordinator = context.persistentStoreCoordinator!
try persistentStoreCoordinator.execute(deleteRequest, with: context)

try context.save()
}

关于swift - 核心数据 EXC_BAD_ACCESS 删除时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53102721/

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