在Xcode 6.3 Beta中升级到Swift 1.2后,我所有执行 fetchRequest 的代码现在都会导致和EXC_BAD_ACCESS
这是一个示例,我根据实体名称删除实体:
func deleteAllEntities(entityName: String)
{
println(entityName)
var error: NSError? = nil
let allEntityFetchRequest = NSFetchRequest(entityName: entityName)
if let savedObjects = self.managedObjectContext?.executeFetchRequest(allEntityFetchRequest, error: &error) as? [NSManagedObject]
{
for object in savedObjects
{
self.managedObjectContext?.deleteObject(object as NSManagedObject)
}
// save changes persistent store
if !(self.managedObjectContext!.save(&error))
{
println("ERROR: Error saving model: \(error?.localizedDescription)")
}
}
else
{
println("ERROR: Fetch error: \(error!.localizedDescription)")
}
}
另一个例子是:
var error: NSError? = nil
if let venueObjects = self.managedObjectContext?.executeFetchRequest(relatedVenuesEntityFetchRequest, error: &error) as? [NSManagedObject]
{
// do stuff
}
在发行说明中,我没有看到Swift 1.1和1.2之间存在任何差异。有什么想法吗? Fetch请求返回[AnyObject] !,但是如果我尝试在特定实体类型上运行这些获取请求,它仍会发生。
崩溃的确切原因:
objc发布错误访问
崩溃发生在线上“对于savedObjects中的对象”。调试器没有提供太多信息。
答案 0 :(得分:5)
我已将问题缩小到编译器优化错误。 发布模式默认为最快[-O]'。将其转为“无” - [Onone],可以解决问题。
由于除了Apple以外的任何人都无法修复此问题,因此我将此标记为答案。 我提出了雷达 - 19843889。
答案 1 :(得分:2)
你可能知道:
当Xcode具有可选属性时,它不会准确生成Swift类。你必须手动添加?可选值
从您的问题中不太明确的是,您的实体包含在任何一个'之中。关系。但如果是这种情况,请遵循上面的建议。
来源:http://www.jessesquires.com/better-coredata-models-in-swift/