语法错误实例化objective-c中的对象

时间:2011-07-18 17:42:00

标签: iphone objective-c cocoa xcode4

我正在使用库STPrivilegedTask库,在http://www.sveinbjorn.org/STPrivilegedTask找到源以使用sudo权限运行NSTask。

这是我用来实例化STPrivilegedTask对象的代码,但是我遇到了语法错误:

STPrivilegedTask *task2 = [[STPrivilegedTask alloc] initWithLaunchPath: launchPath: arguments];

我收到“Receiver type STPrivilegedTask for instance方法没有声明方法...”错误。以上语法有效吗?

谢谢,

2 个答案:

答案 0 :(得分:4)

不是Objective-C的专家,但如果我没错,你应该这样称呼它:

STPrivilegedTask *task2 = [[STPrivilegedTask alloc] initWithLaunchPath: launchPath
arguments:arguments];

(假设你的方法中的arguments是你的NSArray)因为方法的声明是:

- (id)initWithLaunchPath: (NSString *)path arguments:  (NSArray *)args;
                                           ^^^ Part of the method signature

而不是

- (id)initWithLaunchPath: (NSString *)path :  (NSArray *)args;

这是您添加的链接中.m文件的示例:

STPrivilegedTask *task = [[[STPrivilegedTask alloc] initWithLaunchPath: path arguments: args] autorelease];

答案 1 :(得分:0)

是的,这根本不是该方法的正确名称。

该方法的选择器为initWithLaunchPath:arguments:。在调用方法时,可以在选择器中的冒号后面插入参数。因此,假设启动路径存储在名为path的变量中,并且参数存储在名为programArguments的变量中,您可以调用这样的方法:

[[STPrivilegedTask alloc] initWithLaunchPath:path arguments:programArguments];