仅针对iOS Swift Core Data Implementation RELEASE构建的init()无效重新声明

时间:2018-08-14 14:10:38

标签: ios swift core-data compiler-errors release

我遇到一种奇怪的情况,我不确定如何解决。

我有一个正在Swift中使用的iOS应用,该应用使用的Core Data我已经成功构建并作为调试构建运行了一段时间。我现在已尝试为发布版本进行概要分析而构建,随后尝试不进行概要分析而进行发布版本构建,并且其中任一发布版本均因定义存储实现部分的结构的错误“ Init()无效重新声明”而失败。我的代码来设置Core Data的存储组件。

这是可以在调试中编译并运行良好的代码,但是无法在发行版中构建...

struct MyStorage { //<-- Invalid redeclaration of init() build error in release build only

static var shared = MyStorage()

@available(iOS 10.0, *)
private lazy var persistentContainer: NSPersistentContainer = {

    let container = NSPersistentContainer(name: "MyStorage")
    container.loadPersistentStores { (storeDescription, error) in
        print("CoreData: Inited \(storeDescription)")
        guard error == nil else {
            print("CoreData: trying to create persistentContainer named Model and got Unresolved error \(String(describing: error))")
            return
        }

    }
    return container
}()

private lazy var persistenStoreCoordinator: NSPersistentStoreCoordinator? = {
    do {
        return try NSPersistentStoreCoordinator.coordinator(name:"MyStorage")
    } catch {
        print ("CoreData: trying to create persistenStoreCoordinator named Model and got Unresolved error \(error)")
    }

    return nil
}()

private lazy var managedObjectContext: NSManagedObjectContext = {
    let coordinator = self.persistenStoreCoordinator
    var managedObjectContext = NSManagedObjectContext(concurrencyType: .mainQueueConcurrencyType)
    managedObjectContext.persistentStoreCoordinator = coordinator

    print ("CoreData: initing and returning managedObjectContext")

    return managedObjectContext
}()

enum SaveStatus {
    case saved, rolledBack, hasNoChanges
}

var context: NSManagedObjectContext {
    mutating get {
        if #available(iOS 10.0, *) {  
            return persistentContainer.viewContext
        } else {
            return managedObjectContext
        }
    }
}

mutating func save() -> SaveStatus {
    if context.hasChanges {
        do {
            try context.save()
            return .saved
        } catch {
            context.rollback()
            return .rolledBack
        }
    }
    return .hasNoChanges
}

我清理了构建(并通过选项清理来清理了构建文件夹),但都无济于事。谁能帮忙弄清楚为什么发布版本失败而调试版本却用相同的代码成功了吗?

在此先感谢您的帮助或建议。

更新:根据以下建议,我将MyStorage结构更改为一个类并删除了变异,现在该代码可以在发布配置中构建,并且可以针对发布的构建进行概要分析。

0 个答案:

没有答案