在Objective-C/XCode中,如何使用在命令行工具项目中定义协议的自定义Cocoa框架?
当我使用Objective-C/XCode编写命令行工具时,如何导入和使用定义协议的定制Cocoa框架?在resume中,我必须将main.m类定义为导入的框架类的委托者在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: "
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];