带有初始化程序崩溃应用程序的台风参数注入

Posted

技术标签:

【中文标题】带有初始化程序崩溃应用程序的台风参数注入【英文标题】:Typhoon parameter injection with initalizer crashing app 【发布时间】:2017-01-21 10:51:53 【问题描述】:

我想在我的应用程序中使用 Typhoon (GitHub & WebSite) 进行依赖注入。我使用 Swift 版本 3 和 Typhoon 3.6。不幸的是,当我尝试初始化对象时,我的应用程序崩溃了。我有以下协议:

协议

import Foundation

@objc public protocol Client 

    func method()


协议实现

import Foundation

public class ClientWhateverImpl : NSObject, Client

    let name : String

    init(name: name) 
        self.name = name
    

    public func method()
      //make something
    


组装

import Foundation
import Typhoon

public class MyAssembly: TyphoonAssembly 

    public dynamic func client() -> AnyObject 

        return TyphoonDefinition.withClass(ClientWhateverImpl.self) 
            (definition) in

            definition!.useInitializer("initWithName:") 
                (initializer) in

                initializer!.injectParameter(with: "name")
            

         as AnyObject
    




在某个地方调用它

let myAssembly : MyAssembly = MyAssembly()
        myAssembly.activate()

let client = myAssembly.client()

不幸的是,我收到了以下错误:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Method 'initWithName:' not found on 'MyApp.ClientWhateverImpl'. Did you include the required ':' characters to signify arguments?'

我在 *** 上阅读了一些关于此错误的帖子,但他们却忘记使用 objectice-c 方法语法。但就我而言,我使用 objc 方法“initWithName”。 swift 3有什么不同吗?有人有同样的问题吗?

【问题讨论】:

你看到维基了吗:github.com/appsquickly/Typhoon/wiki/Swift-Quick-Start 我认为你需要ClientWhateverImpl 也需要TyphoonAssembly 你是什么意思?我在快速入门指南中看不到“骑士”级。我或多或少地使用了仅在 swift 3 中重写的 swift 示例应用程序的代码。您能否根据您的建议写一个答案以避免误解。 【参考方案1】:

好的。我发现了这个问题。它与我想注入的对象有关。它不是从 NSObject 继承的,Typhoon 用它做了一些事情并失败了:

definition!.useInitializer("initWithObject:") 
    (initializer) in
    initializer!.injectParameter(with: MyObject())

之前:

public class MyObject


解决方案:

public class MyObject: NSObject


文档甚至说:

你要注入的每个类都必须是 NSObject 的子类 某种方式(通过子类化或添加 @objc 修饰符)。

我只是认为 ClientWhateverImpl 在我的情况下必须继承自 NSObject。我的错。此问题已结束

【讨论】:

以上是关于带有初始化程序崩溃应用程序的台风参数注入的主要内容,如果未能解决你的问题,请参考以下文章

台风从情节提要将属性注入视图控制器

在基于 arm 的 Android 设备上使用带有参数 -DCMAKE_BUILD_TYPE:STRING=Release 的 lzo 时应用程序崩溃

FreeLibraryAndExitThread 在卸载注入的 DLL 时使程序崩溃

使用 C 崩溃记事本进行 DLL 注入

VC 程序崩溃异常处理集锦

初始化 Facebook 实用程序