Core Data - executeFetchRequest Swift 1.2 发布模式崩溃

Posted

技术标签:

【中文标题】Core Data - executeFetchRequest Swift 1.2 发布模式崩溃【英文标题】:Core Data - executeFetchRequest Swift 1.2 Release mode crashes 【发布时间】:2015-02-15 19:44:58 【问题描述】:

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

崩溃的确切原因:

objc 释放 exc 错误访问

“对于已保存对象中的对象”在线发生了崩溃。调试器没有提供太多信息。

【问题讨论】:

这很奇怪。我遇到了一个非常相似的问题(Swift 1.2,Xcode 6.3 stable),但它在 Array.sort 上带有尾随闭包。禁用优化也帮助我消除了崩溃。 【参考方案1】:

我已将问题缩小到编译器优化错误。 发布模式默认为“最快 [-O]”。将此设置为 'None -[Onone],即可解决问题。

由于除 Apple 以外的任何人都无法解决此问题,因此我已将此标记为答案。 我提出了一个雷达 - 19843889。

【讨论】:

【参考方案2】:

你可能知道:

当 Swift 类具有可选属性时,它们不会准确生成它们。您必须手动添加 ?对于可选值

您的问题不是很清楚,您的实体是否包含在任何“一对一”关系中。但如果是这样的话,请按照上面的建议。

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

【讨论】:

感谢您的建议,但这是一个编译器错误。

以上是关于Core Data - executeFetchRequest Swift 1.2 发布模式崩溃的主要内容,如果未能解决你的问题,请参考以下文章

RestKit / Core Data:远程删除的实体不会从 Core Data 中删除

Plain Core Data vs Core Data + Magical Record

RESTkit,Core Data:在将对象传输到 Core Data 之前对其进行处理

.net core 基于Dapper 的分库分表开源框架(core-data)

EF6 System.Data.Entity.Core.EntityKey 在 Entity Framework Core 中的等价物是啥?

.net core 基于Dapper 的分库分表开源框架(core-data)