声明具有多个参数的Objective-C方法

时间:2014-02-22 14:42:14

标签: objective-c methods syntax

我想将NSTask(NSTask,launchpath和args)传递给函数,但我确实需要一些语义帮助:

AppleDelegate.h文件:

- (void)doTask:(NSTask*)theTask :(NSArray*)arguments :(NSString*)launchPath;

AppleDelegate.m文件:

- (void)doTask:(NSTask*)theTask :(NSArray*)arguments :(NSString*)launchPath
{
    self.currentTask = theTask;

    // do currentTask alloc, set the launcpath and the args, pipe and more
}

以下是调用“doTask”的代码:

NSTask* runMyTask;
NSString *command = @"/usr/bin/hdiutil";
NSArray* taskArgs = [NSArray arrayWithObjects:@"info", @"/", nil];

// Here the error:
[self doTask:runMyTask, taskArgs, command];  // ARC Semantic issue no visible interface for AppleDelegate declares the selector 'doTask'..

选择器显示为未声明,但我认为我确实声明了... 是否可以做这样的事情,错误在哪里?

1 个答案:

答案 0 :(得分:4)

你应该先做这样的教程,以了解Objective-C的基础知识:http://tryobjectivec.codeschool.com/

关于你的问题。您的方法称为doTask:::。您可以像这样调用它:[self doTask:runMyTask :taskArgs :command];。但是,这是不好的做法。您希望每个参数都反映在您的方法名称中。此外,您不希望您的方法名称以dodoes开头。

所以,重命名你的方法:

- (void)runTask:(NSTask *)theTask arguments:(NSArray *)arguments launchPath:(NSString *)launchPath;

并称之为:

[self runTask:runMyTask arguments:taskArgs launchPath:command];

完成。