我遇到了一个奇怪的情况,我不知道如何解决。
我有一个iOS应用程序,我正在Swift中工作,它使用核心数据,我已经成功构建并作为调试版本运行了一段时间。我现在尝试构建版本以对发布版本进行评测,随后只是尝试在不进行评测的情况下进行发布版本,对于定义了设置核心数据存储组件的代码的存储实现部分的结构,发布版本失败并出现错误“init()的重新声明无效”。
下面是在调试中编译并运行良好,但在发布版中无法生成的代码。。。
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
}
我清理了构建(和option cleaned以清理构建文件夹),两者都没有用。有人能帮助解释为什么发布版本失败,而调试版本成功地使用相同的代码吗?
提前感谢您的帮助或建议。
:根据下面的建议,我将MyStorage结构更改为一个类并删除了mutating,现在代码可以在发布配置中生成,并且可以为发布的构建进行分析。