Typhoon 与 Storyboard,实例化 ViewController

2023-12-03

在台风中使用故事板时,如果我在程序集中执行类似的操作

- (id)myController
{

    return [TyphoonDefinition withClass:[BigController class] configuration:^(TyphoonDefinition *definition) {
        [definition injectProperty:@selector(dao) with:[_dataAssembly dao]];
    }];
}

后来我希望工厂将 Typhoon 故事板中的控制器交给我,但最终我得到了使用 alloc/init 创建的普通控制器

vc=  [_factory componentForType:[BigController class]];

在 AppDelegate 中,我使用台风故事板,如下所示

TyphoonComponentFactory *factory = [[TyphoonBlockComponentFactory alloc] initWithAssemblies:@[[Q_Assembly assembly],[P_Assembly assembly]]];

我可以回去使用 Storyboard WithIdentifier...但我想使用_factory能够从情节提要中获取我想要的控制器的引用。


您是否尝试过将故事板声明为工厂组件?这是一个例子:

//Create the factory definition
-(id)myStoryBoard
{
    return [TyphoonDefinition withClass:[TyphoonStoryboard class] configuration:
        ^(TyphoonDefinition* definition) {

         [definition useInitializer:@selector(storyboardWithName:factory:bundle) parameters:
            ^(TyphoonInitializer* initializer) {
            [initializer injectParameterWith:@"storyBoardName"];
            [initializer injectParameterWith:self];
            [initializer injectParameterWith:[NSBundle mainBundle]];
         }
         definition.scope = TyphoonScopeSingleton; //Let's make this a singleton
    }
}

//Create definitions that will be emitted by the factory
-(id)firstVc
{
    return [TyphoonDefinition withFactory:[self myStoryBoard] 
    selector:@selector(instantiateViewControllerWithIdentifier:) 
    parameters:^(TyphoonMethod *factoryMethod) {

        [factoryMethod injectParameterWith:@"viewControllerId"];
    }];

您现在应该能够从工厂解析此组件。此功能的文档is here.

顺便说一句,我注意到您正在使用 TyphoonComponentFactory 接口解析控制器,这很好。但您是否知道 TyphoonComponentFactory 可以充当您的任何装配接口?所以你也可以按如下方式解决:

UIViewController* viewController = [(MyAssemblyType*) factory firstVc];

。 。 。这对于以下情况特别有用:

  • 这样您就可以注册多个同一类型的组件,并在没有“魔术字符串”的情况下解析它。
  • 当您注入工厂本身时,要在 Typhoon 上实现更松散的耦合。

例子:

@interface MyListViewController

//In the assembly we inject 'self'. 
//We'll obtain the detail VC using the "domain specific" assembly interface. 
//. . but when injecting self, it can be cast to TyphoonComponentFactory or any of your 
//assembly interfaces
@property(nonatomic, strong, readonly) MyAssembly* assembly;  

@end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Typhoon 与 Storyboard,实例化 ViewController 的相关文章

随机推荐

  • 如何从C#调用Java代码?

    我们开发了一个 Java 应用程序 并希望从 C 客户端使用该应用程序 该应用程序依赖于 Spring Log4j 最有效的机制是什么 从 Java 代码创建 DLL 来实现这一目标 IKVM 真是太棒了 唯一的问题是它确实为项目增加了约
  • ScrollViewer 不滚动

    我想要一个包含 3 个组件的界面 一个挨着一个 第一个是 ListView 另外两个是 Grid 由于组件会在右侧溢出 因此我想将它们放在 ScrollViewer 中 我没有成功 我尝试做一个非常简单的例子来尝试 但即使这个例子也失败了
  • 是 printf("%d %d", c++, c); 的输出结果也未定义?

    最近看到一个帖子cout 并想知道是否输出 int c 0 printf d d c c 也是未定义的 我在讲座中研究过后缀和前缀运算符仅在获得分号后才增加值 所以根据我的说法 输出0 0是正确的 我在讲座中研究过后缀和前缀运算符仅在获得分
  • codeigniter 中的浏览器缓存问题

    我是代码点火器的新手 我创建了一个登录表单和一个注销部分 当我按下注销部分时 页面将重定向到登录部分 当我单击浏览器中的后退按钮时 它将显示以前的页面 当我单击清除最近历史记录和选择缓存 然后按后退按钮时 它不会显示最近的页面 它只显示登录
  • Glassfish 上的 Spring Boot

    我在 Spring Boot 部署到 GF3 4 期间得到了这个 虽然这是知道问题看到 弹簧启动问题 another 除了 GF 源代码中的 try catch 破解之外 没有其他解决方案 整个问题是关于 Conditional Sprin
  • Java拖放自定义光标

    我使用 JPanel 定义了一个自定义画布样式组件 它将支持将对象拖动到画布上 我似乎无法弄清楚如何使用 TransferHandler 将拖放 DnD 光标更改为自定义光标 例如 我想用我自己的代替 DnD 期间的默认链接光标 有没有办法
  • XCode 4.2.1 上的临时分发 - 权利

    我正在尝试构建我的应用程序以进行临时分发 在 TestFlight 上 我已阅读所有说明并进行了大量网络搜索 我的问题是如何在 Xcode 4 2 1 上创建 entitlements plist 所有说明均表示转到 新建文件 然后在代码签
  • 使用动作监听器获取 JButton 的文本

    有没有理由getText导致error cannot find symbol在代码中显示的动作侦听器内 另外 如果有 我该如何修复这个错误 class openNewPaneActionListener implements ActionL
  • jquery中仅选择第一级元素

    如何仅选择父级的链接元素 ul 从这样的列表中 ul li a href Link a li li a href Link a ul li a href Link a li li a href Link a li li a href Lin
  • 重写实例上的特殊方法

    考虑以下代码 gt gt gt class A object pass gt gt gt def repr self return A gt gt gt from types import MethodType gt gt gt a A g
  • wp_get_attachment_url() 中不带域名的文件路径

    wp get attachment url 处理完整文件路径 例如 http example com wp content uploads 2014 12 aura mp3 我想要没有的网址http example com 所以 我想要上面
  • 在外部库协议中添加和使用新方法时发出警告

    我正在使用外部库 并且我的视图控制器之一正在注册为该框架中的类的委托 现在 在一个地方我想在这个委托类上执行一些代码 我正在为此编写一个方法并在我的委托上调用它 现在 一切正常 但我收到一条警告 称这个新添加的方法不是协议的一部分 这是我的
  • 正则表达式仅允许 1 个字符

    rex lt gt i 我在使用这个正则表达式时遇到了问题 这个想法是检查输入字段中是否存在某些字符 如果存在 则抛出错误 对于每个长度超过 1 个字符的字符串 此正则表达式会引发错误 谁能告诉我我做错了什么 编辑 人们说他们不明白我想用这
  • ruby:批量初始化实例变量

    有没有一种简单的方法来批量分配实例变量 def initialize title nil label left nil label right nil color set nil title title label left label l
  • 为什么在初始化 Spring 时会出现 NullPointerException

    我在服务器上运行批处理作业时遇到问题 而它在我的开发工作站上的 Eclipse 中运行良好 我已经使用 Roo 设置了 Spring 环境 创建了一个实体 并制作了一个可以完成一些工作的批处理 并在我的开发盒上对其进行了良好的测试 我初始化
  • 如何在 Firemonkey 中使用动画 gif?

    如何在 Firemonky 中使用动画 GIF 我可以使用 Timage 加载 gif 但它不是动画 我正在使用 Delphi 10 2 东京 也许有点晚了 但在此页面上找到了一个简单的解决方案 http www raysoftware c
  • Python 将空格分隔的文件行读取为单独的行

    这是在 Windows Server 2008 R2 上 我有一个输入文件 每行一个输入 一些输入中包含空格 我尝试使用下面的简单代码 但它分离出每个单词而不是每行 我最终应该有 208 个新文件夹 删除所有空格 但因此我最终得到 230
  • 为 .NET 5 Core 控制器单元测试模拟或创建实用的 ODataQueryOptions

    我正在将现有的 API 迁移到 net 5 并且面临单元测试迁移的问题 我想保留测试和测试控制器 但我找不到处理 ODataQueryOptions 的方法 因为此类已更改 我无法再找到创建 ODataQueryOptions 的方法 与我
  • JOptionPane - 检查用户输入并防止关闭,直到满足条件

    请有人告诉我是否有一种方便的方法可以防止JOptionPane除非满足用户输入字段的条件 否则单击 确定 后关闭 或者我别无选择只能使用JFrame 到目前为止我的验证逻辑 似乎不起作用 因为由于某种原因这些按钮是一次性可点击的 final
  • Typhoon 与 Storyboard,实例化 ViewController

    在台风中使用故事板时 如果我在程序集中执行类似的操作 id myController return TyphoonDefinition withClass BigController class configuration TyphoonD