Eri*_*pir 4 xcode ios typhoon ios8
我正在 plist 中配置初始组件,它们用于实例化故事板中的第一个控制器。
稍后在应用程序中我将使用以下命令更改根视图控制器:
TyphoonStoryboard* storyboard = [TyphoonStoryboard storyboardWithName:storyboardType factory:factory bundle:nil];
UIViewController* newRootView = [storyboard instantiateViewControllerWithIdentifier:identifier];
self.window.rootViewController = newRootView;
Run Code Online (Sandbox Code Playgroud)
我想在实例化新视图控制器时使用相同的程序集。原因是我希望单身人士继续单身。如果程序集/工厂发生更改,所有类都会重新创建,包括单例。
我如何获得用于初始化故事板中第一个视图控制器的工厂?
紧密的故事板集成:
只要使用plist 集成,以及通常的UILaunchStoryboardName和UIMainStoryboardFile,那么 Typhoon 将确保任何 Storyboard 都是 TyphoonStoryboard。与普通故事板完全一样使用,还有一个额外的好处,即将根据 TyphoonAssembly 类中的定义注入依赖项。
TyphoonComponentFactory 将由故事板保留,因此将在应用程序的整个生命周期中持续存在。
故事板之外:(即 MacOS 应用程序、实用程序等)
TyphoonCompopnentFactory 确实被设计为在应用程序的整个生命周期中保留。(尽管如果您愿意,您可以做其他事情)。
关键概念:
TyphoonComponentFactory原样使用。从一个对象图转到另一个对象图时,有两种方法可以保留 TyphoonComponentFactory。我们将这种组件制作称为“台风感知”。
方法 1:注入程序集:
- (MyAppDelegate *)appDelegate
{
return [TyphoonDefinition withClass:[MyAppDelegate class]
configuration:^(TyphoonDefinition *definition)
{
//Other injections . . .
[definition injectProperty:@selector(factory) with:self];
}];
}
Run Code Online (Sandbox Code Playgroud)
上面的示例将 注入TyphoonComponentFactory到名为 的属性中factory。
TyphoonComponentFactory.componentstype 的属性CoreCompopnents并注入程序集。方法2:使用回调钩子:
使组件“Typhoon 感知”的另一种方法是使用 Typhoon 的回调挂钩。通过重写 NSObject 类别方法:
typhoonSetFactory:(id)thefactory
Run Code Online (Sandbox Code Playgroud)
与上面的其他方法一样,工厂可以用作TyphoonComponentFactory我前面提到的一个或任何装配接口,以下两种方法都可以:
typohoonSetFactory:(TyphoonComponentFactory*)factory
{
//Do something with factory
}
typhoonSetFactory:(ApplicationAssembly*)assembly
{
//Do something with assembly
}
Run Code Online (Sandbox Code Playgroud)
在这两种方法中,使用最适合您的一种。我们推荐前者,因为它是“非侵入性”的,这意味着您自己的类不会直接调用任何 Typhoon API。如果您希望从 Typhoon 迁移出去,您只需提供程序集的替代实现即可。
从一个对象图到另一个对象图:
一旦组件使用上述方法之一“台风感知”,我们就可以使用它从一个对象图转到另一个对象图。
TyphoonScopeObjectGraph,这意味着您可以加载视图控制器,包括任何委托和循环引用。完成后,它将从内存中删除。TyphoonScopeSingleton(或TyphoonScopeWeakSingleton) 的任何组成部分将被保留。有关此功能的更多信息请参阅此处的用户指南。
从一个故事板到另一个故事板:
要在应用程序中的某个时刻以编程方式实例化新的故事板(例如视图控制器):
UIStoryboard *board = [TyphoonStoryboard storyboardWithName:@"name"
factory:factory bundle:[NSBundle mainBundle]];
Run Code Online (Sandbox Code Playgroud)
。。使用上述方法 1 或方法 2 获取工厂。
概括:
| 归档时间: |
|
| 查看次数: |
1074 次 |
| 最近记录: |