问题标签 [typhoon]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ios - EXC_BAD_ACCESS 到台风单例参考
我正在使用 Typhoon 框架来集成我所有的核心组件。我正在处理我的数据层(使用 FMDB 而不是 Core Data)。我有一个 LocalDataStore 类来处理数据到 SQLite 的读取和写入。这是一个单例类,具有设置数据库的初始化方法。然后我有一个引用它的 PlayerDAO。
当我启动应用程序时,会创建 LocalDataStore 并调用初始化方法。然后它开始创建 DAO 类,当它尝试访问 LocalDataStore 时,我收到一个 EXC_BAD_ACCESS 错误。
在启动方案中打开“启用僵尸对象”,我得到一个额外的错误:
-[myapp.SQLiteLocalStore retain]: message sent to deallocated instance 0x1740ab5e0
以下是我在 Typhoon Assembly 中的设置方式:
查看错误发生时的断点,它发生在TyphoonComponentFactory中的这一行:
poolKey = @"localStore"
调试器说它当前正在初始化 playerDAO。该池只有 1 个“localStore”键,值为 _NSZombie_myApp.SQLiteLocalStore
知道可能出了什么问题吗?
swift - Is it possible to register against a protocol in Typhoon for use with TyphoonComponentFactory.componentForType in swift
TyphoonComponentFactoryProtocol.componentForType(classOrProtocol: AnyObject!) cannot accept a protocol
As far as I can tell MyProtocol.self returns a Protocol and protocol does not seem to implement the AnyObject protocol (only Any).
Is there a way to use Typhoon for service location based upon a protocol in swift (other than just directly calling the assembly function) or is this just a limitation of swift and typhoon currently?
ios - Typhoon lazy injection in Swift
While trying and playing around with Typhoon DI, I realized that LazySingleton scope is not working as expected meaning lazy properties are injected even before they are used. Being more concrete I created a TyphoonAssembly as follow :
where Knight is NSObject and has validateProperties
function
After activating assembly and getting knight from it, calling validateProperties
function always print Name not nil and Horse not nil even these properties are never used in my code. Am I missing something here or simply lazy injection does not work same as Swift lazy stored properties do?
ios - Typhoon DI 上的故事板集成
我是台风的新手。我正在阅读文档以将依赖项注入到故事板的视图控制器中。我对框架如何在类上执行 DI 有基本的了解,但情节提要似乎很复杂。我已经阅读了故事板和PList 集成文档,但我有点困惑。
这听起来很傻很明显。如果我的故事板文件名是
Main.storyboard
,在我的plist
我会添加UILaunchStoryboardName
带有值的键Main.storyboard
?key 的价值是
UIMainStoryboardFile
什么?依赖项是否会自动注入,或者我如何指定将哪些依赖项注入到我的故事板的每个视图控制器中?
我找不到使用故事板的示例或教程(并且由于它们中的大多数都在objc中并且我正在使用Swift,所以很难跟进每一步,所以如果这些问题很愚蠢,我提前道歉
ios - Typhoon initializer injection & calling super.init()
I have a parent and child class and an initializer in the child class that accepts some parameters and then calls super.init() to initialize the properties from the base class.
As I have a lot of child classes I want to reuse code for injecting the parameters but I can't figure out a way of injecting some of the members in the base class definition and the rest of them in the child class definition.
I tried the following:
But I get an error that I use an initializer with 4 parameters but only inject 2 of them. Is there a way I can make this work or do I have to refactor the base params to be properties like the example in the docs?
ios - 子类化 Typhoon 程序集以覆盖不起作用的方法
我正在对 Typhoon 程序集进行子类化,以便返回存根实现,用于单元测试目的。
我的程序集看起来像这样:
我的测试类仅用于测试 type 的实例ClassToTest
,并且我想使用初始化器注入的依赖于SomeRealWorldClass
要存根的 type 对象来测试它。因此,我将 RealAssembly 子类化,以便将instanceToStubOut()
其覆盖以返回我的存根对象。
我希望这会起作用,但事实并非如此。Typhoon 似乎注入了一个未初始化的对象,而不是调用 TestAssembly.instanceToStubOut()
难道我做错了什么?我应该采取不同的方法吗?
编辑:这里有一些代码可以粘贴到 Swift Playground 中来演示问题。最后一行显示c.otherInstance
返回nil
:
ios - 推送视图控制器时的循环依赖
我已经看到,TyphoonScopeObjectGraph范围对于具有循环依赖关系很有用,例如控制器和视图,它具有指向控制器的委托属性。
所以我用以下场景对此进行了测试:
控制器 A 推送控制器 B,控制器 B 推送控制器 C,控制器 C 具有指向控制器 A 的弱委托。
控制器 C 有一个按钮,用于在此委托上执行方法。
我已经看到 Typhoon 实例化了控制器 C,它正确地将控制器 A 设置为委托,但是当按下按钮时,委托已更新为 nil。
这是汇编代码:
这是 ViewControllerC:
这是 ViewControllerA:
为什么是这样?有解决方法吗?
ios - 在没有情节提要的情况下将依赖项注入 ViewController
我已经使用故事板和 plist 集成测试了 Typhoon,在我的程序集中定义了依赖项并按预期工作。例如,当从 ViewControllerA 到 ViewControllerB 执行推送 segue 时,ViewControllerB 的依赖项被正确注入。我已经看到 instantiateViewControllerWithIdentifier 被调配以注入属性。
但是,我也有不使用情节提要的遗留代码。它使用 XIB。例如,LegacyViewControllerA 推送 LegacyViewControllerB:
这是 LegacyViewControllerA 中的代码:
这是组装:
调试 LegacyViewControllerB 的 viewDidLoad,我希望已经注入了 apiClient 依赖项,但事实并非如此。为什么?
编辑:
我检查了示例应用程序,我想知道是否有办法避免在 ViewControllers 中了解程序集和/或导入 Typhoon。实际上,我真的很喜欢与故事板的集成,因为我没有提及 Typhoon。
所以,假设我没有任何情节提要,那么注入 ViewController 的唯一方法是执行以下操作?
并且不得不将我的程序集修改为以下内容:
然而,这对我也不起作用:[assembly legacyVCB]
正确返回一个带有 myApiClient 注入的 LegacyViewControllerB 实例,但是在推送它时,LegacyViewControllerB 的 viewDidLoad 没有注入它。似乎推它会创建一个新的 LegacyViewControllerB,因为内存地址不同。你认为为什么会这样?
提前致谢。
ios - Typhoon : 获取一个不依赖 Typhoon 的类的 Typhoon 构建的实例
使用 Typhoon 故事板集成,依赖注入所需要的只是在要注入的类上使用自动注入宏或汇编方法。
但是在其他地方,有必要让 Typhoon 为我们构建一个实例。有没有办法获得一个实例,而不让我的课程依赖于 Typhoon?
ios - 台风没有注入财产(没有情节提要)
我无法使用 XIB 将属性注入到视图控制器中initWithNibName:bundle:
例子:
这是我的组装:
ViewControllerA 代码:
ViewControllerB 代码:
ViewControllerC 代码:
AppDelegate 代码:
我已经检查了样本,它们与这种方法不同。请你能告诉我我做错了什么吗?
谢谢。