Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Objective-C/XCode中,如何使用在命令行工具项目中定义协议的自定义Cocoa框架?_Objective C_Macos_Frameworks_Protocols - Fatal编程技术网

在Objective-C/XCode中,如何使用在命令行工具项目中定义协议的自定义Cocoa框架?

在Objective-C/XCode中,如何使用在命令行工具项目中定义协议的自定义Cocoa框架?,objective-c,macos,frameworks,protocols,Objective C,Macos,Frameworks,Protocols,当我使用Objective-C/XCode编写命令行工具时,如何导入和使用定义协议的定制Cocoa框架?在resume中,我必须将main.m类定义为导入的框架类的委托者 int main(int argc, const char * argv[]) { @autoreleasepool { // insert code here... NSLog(@"Hello, World!"); // throws error warning: "

当我使用Objective-C/XCode编写命令行工具时,如何导入和使用定义协议的定制Cocoa框架?在resume中,我必须将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;
}
即使将上面的代码更正为具有正确的左括号数(
[
),也不能在
main()
函数中使用
self
,因为
main()
是一个函数,而不是某个对象的方法。如果需要
MyFrameworkClass
的委托,则需要先创建一个委托,如:

SomeDelegateClass *delegate = [[SomeDelegateClass alloc] init];
MyFrameworkClass *client = [[MyFrameworkClass alloc] initWithDelegate:delegate];
在GUI应用程序中,通常有一个应用程序委托来担任此角色,该对象通常由一些框架函数为您实例化,如
UIApplicationMain()
NSApplicationMain()

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

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