我知道这是一个愚蠢的问题,但我现在已经找了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部分出现错误。我尝试了其他几种方式,我不确定正确的语法是什么。
有人可以把我救出来吗?
答案 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];