gpt4 book ai didi

macos - SWIFT OS X - 从持久存储中删除托管对象 : fatal error

转载 作者:行者123 更新时间:2023-11-28 09:03:31 24 4
gpt4 key购买 nike

我正在使用下面的函数从持久存储中删除托管对象。删除函数为:

 func deletePPRRowDataManagedObject(date: NSDate) {

let newManagedObject = NSEntityDescription.insertNewObjectForEntityForName(self.pprRowEntity, inManagedObjectContext: self.managedObjectContext!) as! PPRRowData
var pprRowDataArray = self.fetchPPRRowDataManagedObjects()
let filteredPPRRowDataArray = pprRowDataArray.filter({$0.pprDate == date})
for object in filteredPPRRowDataArray {

managedObjectContext?.deleteObject(object)
}

var pprFileDataArray = self.fetchPPRFileDataManagedObjects()
let filteredPPRFileDataArray = pprFileDataArray.filter({$0.pprDate == date})
for object in filteredPPRFileDataArray {

managedObjectContext?.deleteObject(object)
}

var error: NSError? = nil
if !managedObjectContext!.save(&error) {

// this code needs to be replaced to properly deal with the error
abort()
}
}

我有三个子类化的核心数据实体,我试图从这段代码中的两个实体的持久存储中删除托管对象。

三个实体之间没有定义任何关系。这三个都保存在同一个托管对象上下文和同一个持久存储中。

删除托管对象后,我可以在持久存储中创建和获取数据,而不会出现运行时错误。我可以从第三个实体访问数据,但是现在当我尝试访问从获取中创建的数据数组时出现数据错误......从我删除的两个实体的持久存储中获取托管对象的函数的托管对象。

从持久存储中获取数据的代码(如下)运行没有错误。错误

(EXC_BAD_ACCESS (code=1, address=0x0) error)

在我尝试访问 outputArray 时发生。

     let outputArray = addDataFiles.fetchPPRRowDataManagedObjects()

当我在任何删除之前运行代码时,它运行没有任何问题。

任何关于可能导致错误的想法/指导将不胜感激。我无法确定我用来删除托管对象的代码或我正在使用的相关获取...功能是否有问题。

以下是我正在使用的其中一个获取...函数的示例:

func fetchPPRRowDataManagedObjects() ->Array<PPRRowData>{

let fetchRequestPPRRowData = NSFetchRequest()
let entityPPRRowData = NSEntityDescription.entityForName(self.pprRowEntity, inManagedObjectContext: self.managedObjectContext!)
var resultsArrayPPRRowData: Array<PPRRowData> = []
var arrayFetchResults: Array<AnyObject> = []
fetchRequestPPRRowData.entity = entityPPRRowData
var error: NSError? = nil
arrayFetchResults = managedObjectContext!.executeFetchRequest(fetchRequestPPRRowData, error: &error)!
for index in arrayFetchResults {

resultsArrayPPRRowData.append(index as! PPRRowData)
}
return resultsArrayPPRRowData
}

最佳答案

好的 - 经过大量代码测试后,我确定问题是错误的 !managedObjectContext!.save() 语句在我迭代代码时在循环内触发 - 在 createManagedObject() 函数和在我创建的 .deleteManagedObject() 函数中。甚至不确定它为什么在那里(也就是说,为什么我首先把它放在那里)但它显然是造成问题的原因。

Marcus,非常感谢你的耐心和建议,这让我更仔细地审查了我的代码并最终找出了问题所在。 – 狼星 1 小时前

关于macos - SWIFT OS X - 从持久存储中删除托管对象 : fatal error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31431659/

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