【问题标题】:syntax error instantiating an object in objective-c在objective-c中实例化对象的语法错误
【发布时间】:2011-07-18 17:41:59
【问题描述】:
我正在使用库 STPrivilegedTask 库,源代码位于 http://www.sveinbjorn.org/STPrivilegedTask 以运行具有 sudo 权限的 NSTask。
这是我用来实例化 STPrivilegedTask 对象的代码,但出现语法错误:
STPrivilegedTask *task2 = [[STPrivilegedTask alloc] initWithLaunchPath: launchPath: arguments];
我收到“实例方法的接收器类型 STPrivilegedTask 未声明方法...”错误。上面的语法有效吗?
谢谢,
【问题讨论】:
标签:
iphone
objective-c
cocoa
xcode4
【解决方案1】:
不是 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];
【解决方案2】:
是的,这根本不是该方法的正确名称。
该方法的选择器是initWithLaunchPath:arguments:。当你调用一个方法时,你在选择器的冒号后面插入参数。因此,假设启动路径存储在名为path 的变量中,而参数存储在名为programArguments 的变量中,您可以这样调用该方法:
[[STPrivilegedTask alloc] initWithLaunchPath:path arguments:programArguments];