- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在尝试使用 Typhoon 将依赖注入(inject)添加到我的应用程序中,该应用程序现在一半是 Swift,一半是遗留的 Objective-C。我正在尝试从我的程序集中的 Storyboard实例化 View Controller ,但在下面的崩溃中运行。我在这里阅读https://github.com/appsquickly/Typhoon/issues/293使用 NSString 可以解决问题,但正如您在下面看到的那样,我已经这样做了,但并没有太大帮助……有什么想法吗?
dynamic func typhoonStoryboard(name: NSString) -> AnyObject {
return TyphoonDefinition.withClass(TyphoonStoryboard.self, configuration: { (definition) -> Void in
definition.useInitializer("storyboardWithName:factory:bundle:", parameters: { (initializer) -> Void in
initializer.injectParameterWith(name)
initializer.injectParameterWith(self)
initializer.injectParameterWith(NSBundle.mainBundle())
})
})
}
dynamic func viewController(withStoryboardName storyboardName: NSString, storyboardIdentifier: NSString) -> AnyObject {
return TyphoonDefinition.withFactory(self.typhoonStoryboard(NSString(string: storyboardName)), selector: "instantiateViewControllerWithIdentifier:", parameters: { (method) -> Void in
method.injectParameterWith(NSString(string: storyboardIdentifier))
}, configuration: { (definition) -> Void in
})
}
知道哪里出了问题吗?如您所见,我已经在使用 NSString 进行变通,但它仍然因以下异常异常而崩溃...
2015-09-15 09:26:32.484 MyApp[64855:5393006] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'You can't call a method on the runtime argument being passed in. It has to be passed in as-is'
*** First throw call stack:
(
0 CoreFoundation 0x000000010ae0ff65 __exceptionPreprocess + 165
1 libobjc.A.dylib 0x000000010a42edeb objc_exception_throw + 48
2 CoreFoundation 0x000000010ae0fe9d +[NSException raise:format:] + 205
3 MyApp 0x00000001052282b3 -[TyphoonInjectionByRuntimeArgument forwardingTargetForSelector:] + 67
4 CoreFoundation 0x000000010ad65c4e ___forwarding___ + 158
5 CoreFoundation 0x000000010ad65b28 _CF_forwarding_prep_0 + 120
6 libswiftCore.dylib 0x000000010bff54b3 _TTSf4g_d___TFSSCfMSSFT12_cocoaStringPSs9AnyObject__SS + 131
7 libswiftCore.dylib 0x000000010bfbce33 _TFSSCfMSSFT12_cocoaStringPSs9AnyObject__SS + 19
8 libswiftFoundation.dylib 0x000000010c3e0af9 _TToFE10FoundationCSo8NSStringcfMS0_FT6stringS0__S0_ + 41
9 libswiftFoundation.dylib 0x000000010c3e0a3a _TFE10FoundationCSo8NSStringCfMS0_FT6stringS0__S0_ + 58
10 MyApp 0x0000000104cc890d _TFC8MyApp22ViewControllerAssembly14viewControllerfS0_FT18withStoryboardNameCSo8NSString20storyboardIdentifierS1__PSs9AnyObject_ + 157
11 MyApp 0x0000000104cc90cf _TToFC8MyApp22ViewControllerAssembly14viewControllerfS0_FT18withStoryboardNameCSo8NSString20storyboardIdentifierS1__PSs9AnyObject_ + 79
12 CoreFoundation 0x000000010acfe85c __invoking___ + 140
13 CoreFoundation 0x000000010acfe6ae -[NSInvocation invoke] + 286
14 CoreFoundation 0x000000010ad8f016 -[NSInvocation invokeWithTarget:] + 54
15 MyApp 0x000000010520ea76 objc_msgSend_InjectionArguments + 454
16 MyApp 0x000000010520e83e -[TyphoonAssemblyDefinitionBuilder definitionForKey:] + 254
17 MyApp 0x000000010520e61f -[TyphoonAssemblyDefinitionBuilder populateCacheWithDefinitionForKey:] + 111
18 MyApp 0x000000010520e01b -[TyphoonAssemblyDefinitionBuilder builtDefinitionForKey:args:] + 203
19 MyApp 0x000000010520df20 -[TyphoonAssemblyDefinitionBuilder buildDefinitionForKey:] + 64
20 MyApp 0x000000010520de43 __49-[TyphoonAssemblyDefinitionBuilder populateCache]_block_invoke + 163
21 CoreFoundation 0x000000010ad6f0df __51-[__NSSetM enumerateObjectsWithOptions:usingBlock:]_block_invoke + 79
22 CoreFoundation 0x000000010ad6efea -[__NSSetM enumerateObjectsWithOptions:usingBlock:] + 202
23 MyApp 0x000000010520dd69 -[TyphoonAssemblyDefinitionBuilder populateCache] + 185
24 MyApp 0x000000010520dc1a -[TyphoonAssemblyDefinitionBuilder builtDefinitions] + 74
25 MyApp 0x000000010520a976 -[TyphoonAssembly definitions] + 54
26 MyApp 0x000000010520ff1a -[TyphoonBlockComponentFactory registerAllDefinitions:] + 90
27 MyApp 0x000000010520fd78 -[TyphoonBlockComponentFactory buildAssembly:] + 104
28 MyApp 0x000000010520fc10 -[TyphoonBlockComponentFactory initWithAssemblies:] + 544
29 MyApp 0x000000010520f8b7 +[TyphoonBlockComponentFactory factoryWithAssemblies:] + 87
30 MyApp 0x00000001052340d2 +[TyphoonStartup requireInitialFactory] + 194
31 MyApp 0x00000001052345ad __60+[TyphoonStartup swizzleSetDelegateMethodOnApplicationClass]_block_invoke + 93
32 UIKit 0x0000000108a8825b -[UIApplication _setDelegate:assumeOwnership:] + 51
33 UIKit 0x0000000108a93cea _UIApplicationMainPreparations + 1618
34 UIKit 0x0000000108a93647 UIApplicationMain + 124
35 MyApp 0x0000000104b1f80f main + 111
36 libdyld.dylib 0x000000010c5a492d start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
最佳答案
Typhoon 是一个相当典型的内省(introspection)和反射类型的 DI 容器,针对 Objective-C 进行了优化。 (也适用于 Swift)。
获取组件:
Rules parsed on startup->post processing->factory emits built objects
因此:在运行时参数的情况下,我们不能对它们调用任何方法,或者在传入后以其他方式操作它们,因为这与 Typhoon 构建对象实例化蓝图时的启动阶段无关。
如果您声明 NSString 类型的运行时参数,并直接传递它而不进行操作(而不是 NSString(string: storyboardIdentifier)
),它应该可以正常工作。
关于ios - 台风 + swift : Crash when using run-time arguments,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32580206/
我在优化 JOIN 以使用复合索引时遇到问题。我的查询是: SELECT p1.id, p1.category_id, p1.tag_id, i.rating FROM products p1
我有一个简单的 SQL 查询,我正在尝试对其进行优化以删除“使用位置;使用临时;使用文件排序”。 这是表格: CREATE TABLE `special_offers` ( `so_id` int
我有一个具有以下结构的应用程序表 app_id VARCHAR(32) NOT NULL, dormant VARCHAR(6) NOT NULL, user_id INT(10) NOT NULL
此查询的正确索引是什么。 我尝试为此查询提供不同的索引组合,但它仍在使用临时文件、文件排序等。 总表数据 - 7,60,346 产品= '连衣裙' - 总行数 = 122 554 CREATE TAB
为什么额外的是“使用where;使用索引”而不是“使用索引”。 CREATE TABLE `pre_count` ( `count_id`
我有一个包含大量记录的数据库,当我使用以下 SQL 加载页面时,速度非常慢。 SELECT goal.title, max(updates.date_updated) as update_sort F
我想知道 Using index condition 和 Using where 之间的区别;使用索引。我认为这两种方法都使用索引来获取第一个结果记录集,并使用 WHERE 条件进行过滤。 Q1。有什
I am using TypeScript 5.2 version, I have following setup:我使用的是TypeScript 5.2版本,我有以下设置: { "
I am using TypeScript 5.2 version, I have following setup:我使用的是TypeScript 5.2版本,我有以下设置: { "
I am using TypeScript 5.2 version, I have following setup:我使用的是TypeScript 5.2版本,我有以下设置: { "
mysql Ver 14.14 Distrib 5.1.58,用于使用 readline 5.1 的 redhat-linux-gnu (x86_64) 我正在接手一个旧项目。我被要求加快速度。我通过
在过去 10 多年左右的时间里,我一直打开数据库 (mysql) 的连接并保持打开状态,直到应用程序关闭。所有查询都在连接上执行。 现在,当我在 Servicestack 网页上看到示例时,我总是看到
我使用 MySQL 为我的站点构建了一个自定义论坛。列表页面本质上是一个包含以下列的表格:主题、上次更新和# Replies。 数据库表有以下列: id name body date topic_id
在mysql中解释的额外字段中你可以得到: 使用索引 使用where;使用索引 两者有什么区别? 为了更好地解释我的问题,我将使用下表: CREATE TABLE `test` ( `id` bi
我经常看到人们在其Haxe代码中使用关键字using。它似乎在import语句之后。 例如,我发现这是一个代码片段: import haxe.macro.Context; import haxe.ma
这个问题在这里已经有了答案: "reduce" or "apply" using logical functions in Clojure (2 个答案) 关闭 8 年前。 “and”似乎是一个宏,
这个问题在这里已经有了答案: "reduce" or "apply" using logical functions in Clojure (2 个答案) 关闭 8 年前。 “and”似乎是一个宏,
我正在考虑在我的应用程序中使用注册表模式来存储指向某些应用程序窗口和 Pane 的弱指针。应用程序的一般结构如下所示。 该应用程序有一个 MainFrame 顶层窗口,其中有几个子 Pane 。可以有
奇怪的是:。似乎a是b或多或少被定义为id(A)==id(B)。用这种方式制造错误很容易:。有些名字出人意料地出现在Else块中。解决方法很简单,我们应该使用ext==‘.mp3’,但是如果ext表面
我遇到了一个我似乎无法解决的 MySQL 问题。为了能够快速执行用于报告目的的 GROUP BY 查询,我已经将几个表非规范化为以下内容(该表由其他表上的触发器维护,我已经同意了与此): DROP T
我是一名优秀的程序员,十分优秀!