首页 > 解决方案 > iOS Swift Core Data Implementation RELEASE build 的 init() 重新声明无效

问题描述

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

我有一个我正在使用 Swift 开发的 iOS 应用程序,它使用我已经成功构建并作为调试构建运行一段时间的核心数据。我现在尝试为发布构建的分析进行构建,随后只是尝试在没有分析的情况下进行发布构建,并且任何一个发布构建都失败并出现错误“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 结构更改为一个类并删除了变异,现在代码可以在发布配置中构建,并且可以针对发布的构建进行分析。

标签: iosswiftcore-datacompiler-errorsrelease

解决方案


推荐阅读