首页 文章

核心数据 - executeFetchRequest Swift 1.2发布模式崩溃

提问于
浏览
3

在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] !,但是如果我尝试在特定实体类型上运行这些获取请求,它仍然会发生 .

Exact reason for crash:

objc发布不良访问权限

崩溃发生在“对于savedObjects中的对象”行 . 调试器没有提供太多信息 .

enter image description here

2 回答

  • 5

    我已将问题缩小到编译器优化错误 . 释放模式默认为“最快[-O]” . 将其转为'无 - [Onone],可以解决问题 .

    enter image description here

    由于除了Apple以外的任何人都无法修复此问题,因此我将此标记为答案 . 我提出了雷达 - 19843889 .

  • 2

    你可能知道:

    Xcode在具有可选属性时不会准确生成Swift类 . 你必须手动添加?用于可选值

    从您的问题来看,您的实体包含在任何“一对一”关系中并不是很清楚 . 但如果是这种情况,请遵循上面的建议 .

    资料来源:http://www.jessesquires.com/better-coredata-models-in-swift/

相关问题