SWIFT OS X - 从持久存储中删除托管对象:致命错误
SWIFT OS X - deleting managed objects from persistent store: fatal error
我正在使用下面的函数从持久存储中删除托管对象。
删除函数为:
func deletePPRRowDataManagedObject(date: NSDate) {
let newManagedObject = NSEntityDescription.insertNewObjectForEntityForName(self.pprRowEntity, inManagedObjectContext: self.managedObjectContext!) as! PPRRowData
var pprRowDataArray = self.fetchPPRRowDataManagedObjects()
let filteredPPRRowDataArray = pprRowDataArray.filter({[=12=].pprDate == date})
for object in filteredPPRRowDataArray {
managedObjectContext?.deleteObject(object)
}
var pprFileDataArray = self.fetchPPRFileDataManagedObjects()
let filteredPPRFileDataArray = pprFileDataArray.filter({[=12=].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()
当我 运行 删除之前的代码时,它 运行 没有任何问题。
任何关于可能造成错误的 thoughts/guidance 将不胜感激。我无法确定这是否是我用于删除托管对象的代码或我正在使用的相关获取...功能的问题。
以下是我正在使用的获取...功能之一的示例:
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 小时前
我正在使用下面的函数从持久存储中删除托管对象。 删除函数为:
func deletePPRRowDataManagedObject(date: NSDate) {
let newManagedObject = NSEntityDescription.insertNewObjectForEntityForName(self.pprRowEntity, inManagedObjectContext: self.managedObjectContext!) as! PPRRowData
var pprRowDataArray = self.fetchPPRRowDataManagedObjects()
let filteredPPRRowDataArray = pprRowDataArray.filter({[=12=].pprDate == date})
for object in filteredPPRRowDataArray {
managedObjectContext?.deleteObject(object)
}
var pprFileDataArray = self.fetchPPRFileDataManagedObjects()
let filteredPPRFileDataArray = pprFileDataArray.filter({[=12=].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()
当我 运行 删除之前的代码时,它 运行 没有任何问题。
任何关于可能造成错误的 thoughts/guidance 将不胜感激。我无法确定这是否是我用于删除托管对象的代码或我正在使用的相关获取...功能的问题。
以下是我正在使用的获取...功能之一的示例:
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 小时前