对Typhoon Singleton Reference的EXC_BAD_ACCESS

时间:2015-07-06 20:31:01

标签: ios swift typhoon

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

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

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

以下是我如何在台风大会中进行设置:

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"值为_NSZombie_myApp.SQLiteLocalStore

关于可能出现什么问题的任何想法?

1 个答案:

答案 0 :(得分:2)

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

我仍然很好奇我是否做错了导致普通Singleton的内存错误。