【问题标题】:In Objective-C/XCode, how can I use a custom Cocoa Framework that defines a protocol within Command Line Tools project?在 Objective-C/XCode 中,我如何使用自定义 Cocoa 框架来定义命令行工具项目中的协议?
【发布时间】:2014-10-23 14:47:11
【问题描述】:

当我使用 Objective-C/XCode 编写命令行工具时,如何导入和使用定义协议的自定义 Cocoa 框架?在简历中,我必须将 main.m 类定义为导入的框架类的委托者。

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // insert code here...
        NSLog(@"Hello, World!");

        // throws error warning: "Use of undeclared identifier 'self'...
        // How can I pass main.m class here?
        MyFrameworkClass *client = [MyFrameworkClass alloc] initWithDelegate:self];
    }
    return 0;
}

【问题讨论】:

    标签: objective-c macos frameworks protocols


    【解决方案1】:
    MyFrameworkClass *client = [MyFrameworkClass alloc] initWithDelegate:self];
    

    即使您将上面的代码更正为具有正确数量的左括号 ([),您也不能在您的 main() 函数中使用 self,因为 main() 是一个函数,而不是某个对象的方法.如果您需要 MyFrameworkClass 的委托,您需要先创建一个,例如:

    SomeDelegateClass *delegate = [[SomeDelegateClass alloc] init];
    MyFrameworkClass *client = [[MyFrameworkClass alloc] initWithDelegate:delegate];
    

    一个 GUI 应用程序,您通常有一个应用程序委托来担任此角色,并且该对象通常由一些框架函数为您实例化,例如 UIApplicationMain()NSApplicationMain()。在公用线路程序中没有这个,所以你需要自己做。

    但是,请注意不要误用 Cocoa 框架。 Cocoa 的许多部分都需要特定的上下文,例如运行循环,并且在通常的 GUI 应用程序上下文之外使用框架会导致问题。您可能想阅读 Matt Gallagher 的博文Cocoa Application Startup 中的 Cocoa 应用程序启动过程。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-20
      • 1970-01-01
      • 1970-01-01
      • 2016-03-13
      相关资源
      最近更新 更多