在具有多个变量的另一个类中调用方法的正确语法是什么?

时间:2012-02-03 07:11:51

标签: iphone objective-c ios delegates

我知道这是一个愚蠢的问题,但我现在已经找了45分钟,似乎无法做到这一点。我正在使用方法练习并在名为QuotesAppDelegate的委托类中使用以下方法。

- (NSArray *) getQuoteMaps: fromSubId:(NSString *)subId {

QuotesAppDelegate *appDelegate = (QuotesAppDelegate *)[[UIApplication sharedApplication] delegate];
self.quotes = [appDelegate quotes];
self.quoteMaps = [appDelegate quoteMaps];

//get the quote_ids from quote_map for this subject_id
NSPredicate *filterSubjectId = [NSPredicate predicateWithFormat:@"subject_id == %@", subId];
NSArray *quoteMapSection = [self.quoteMaps filteredArrayUsingPredicate:filterSubjectId];

NSLog(@"appDelegate getQuoteMaps Count: %i", quoteMapSection.count);

return quoteMapSection;

}

我想在这里从SubjectViewController类中调用它:

    NSArray *quoteMapSection = [appDelegate.getQuoteMaps fromSubId:selectedSubject.subject_id];

但是在appDelegate.getQuoteMaps部分出现错误。我尝试了其他几种方式,我不确定正确的语法是什么。

有人可以把我救出来吗?

5 个答案:

答案 0 :(得分:3)

将功能签名更改为

- (NSArray *) getQuoteMapsFromSubId:(NSString *)subId

然后像这样打电话

NSArray *quoteMapSection = [appDelegate getQuoteMapsFromSubId:selectedSubject.subject_id];

答案 1 :(得分:2)

一般来说,Objective-C中的方法调用语法是[object method:firstArgument parameter:secondArgument]。这是一个开括号,你要发送消息的对象,然后重复方法签名,包括参数名称,但用参数替换它们的参数。有人可能会说这非常冗长,但它的可读性也非常好。

因此,在您的具体情况下,正确的语法是

[appDelegate getQuoteMapsFromSubId:selectedSub]

假设您将声明修改为

- (NSArray *) getQuoteMapsFromSubId:(NSString *)subId

现在使用你使用的点语法。点语法可用于调用带有返回类型的无参数方法(如属性getter),或使用赋值表达式左侧的单个参数调用void方法。它应该只用于属性,以避免混淆人。您可以在此处找到更多信息http://eschatologist.net/blog/?p=160

答案 2 :(得分:2)

我在第一行看到错误:

- (NSArray *) getQuoteMaps: fromSubId:(NSString *)subId

你没有指定第一个参数的类型和名称。

- (NSArray *) getQuoteMaps:(NSTypeHere *) yourParamHere fromSubId:(NSString *)subId

或一起删除第一个冒号:

- (NSArray *) getQuoteMapsfromSubId:(NSString *)subId

然后叫它:

[yourObject getQuoteMaps: aVarHere fromSubId: anotherVarHere];

[yourObject getQuoteMapsfromSubId: aVarHere];

答案 3 :(得分:1)

这一行:

NSArray *quoteMapSection = [appDelegate.getQuoteMaps fromSubId:selectedSubject.subject_id];

很奇怪。

首先,您不能以这种方式定义参数。你需要采取一些论点: - (NSArray *) getQuoteMaps:(NSObject*)object fromSubId:(NSString *)subId;

其次,使用appDelegate.getQuoteMaps ...这是一个属性引用无法调用方法。你需要做一些事情 [appDelegate getQuoteMaps:nil fromSubId:selectedSubject.subject_id];

最后,我只想将方法的标题更改为: - (NSArray *) getQuoteMapsFromSubId:(NSString *)subId; 并且跳过你没有完全指定目的的第一个参数。

答案 4 :(得分:1)

您无法使用classInstance.methodName调用方法。

正确的格式是

NSArray *quoteMapSection = [[appDelegate getQuoteMaps] fromSubId:selectedSubject.subject_id];