EXC_BAD_ACCESS 到台风单身人士参考

EXC_BAD_ACCESS to Typhoon Singleton Reference

我正在使用 Typhoon Framework 来集成我所有的核心组件。我正在处理我的数据层(使用 FMDB 而不是 Core Data)。我有一个 LocalDataStore class 来处理 SQLite 的数据读写。这是一个具有设置数据库的初始化方法的单例 class。然后我有一个引用它的 PlayerDAO。

当我启动应用程序时,会创建 LocalDataStore 并调用初始化方法。然后它会创建 DAO class,当它尝试访问 LocalDataStore 时,我收到 EXC_BAD_ACCESS 错误。

在启动方案中打开 "Enable Zombie Objects",我收到一个额外的错误: -[myapp.SQLiteLocalStore retain]: message sent to deallocated instance 0x1740ab5e0

以下是我在 Typhoon Assembly 中的设置方式:

dynamic func config() -> TyphoonDefinition {
    return TyphoonDefinition.configDefinitionWithName("MyApp.plist")
}

dynamic func localStore() -> AnyObject {
    return TyphoonDefinition.withClass(SQLiteLocalStore.self, configuration: {
        (definition) in

        definition.injectProperty("databaseName", with: TyphoonConfig("sqlite.filename"))

        definition.performAfterInjections("initDatabase")
        definition.scope = .Singleton
    })
}

dynamic func playerDAO() -> AnyObject {     
    return TyphoonDefinition.withClass(SQLitePlayerDAO.self, configuration: {
        (definition) in

        definition.injectProperty("localStore", with: self.localStore())
    })
}

查看报错时的断点,发生在TyphoonComponentFactory中的这一行:

- (id)newOrScopeCachedInstanceForDefinition:(TyphoonDefinition *)definition args:(TyphoonRuntimeArguments *)args {
   ...
   instance = [pool objectForKey:poolKey];   // line 431
   ...
}

poolKey = @"localStore"

调试器说它当前正在初始化 playerDAO。该池只有 "localStore" 的 1 个键,值为 _NSZombie_myApp.SQLiteLocalStore

知道哪里出了问题吗?

好吧,将 definition.scope = .Singleton 更改为 definition.scope = .LazySingleton 修复了它...就我而言,这可能是一个更好的方法。

我仍然很好奇我是否做错了什么导致普通单例内存错误。