我正在使用 Typhoon 框架来集成我所有的核心组件。我正在处理我的数据层(使用 FMDB 而不是 Core Data)。我有一个 LocalDataStore 类来处理数据到 SQLite 的读取和写入。这是一个单例类,具有设置数据库的初始化方法。然后我有一个引用它的 PlayerDAO。
当我启动应用程序时,会创建 LocalDataStore 并调用初始化方法。然后它开始创建 DAO 类,当它尝试访问 LocalDataStore 时,我收到一个 EXC_BAD_ACCESS 错误。
在启动方案中打开“启用僵尸对象”,我得到一个额外的错误:
-[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。该池只有 1 个“localStore”键,值为 _NSZombie_myApp.SQLiteLocalStore
知道可能出了什么问题吗?