Каков правильный синтаксис для вызова метода в другом классе с несколькими переменными? - PullRequest
0 голосов
/ 03 февраля 2012

Я знаю, что это глупый вопрос, но я искал 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 ]

3 голосов
/ 03 февраля 2012

Измените подпись функции на

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

и затем звоните вот так

NSArray *quoteMapSection = [appDelegate getQuoteMapsFromSubId:selectedSubject.subject_id];
2 голосов
/ 03 февраля 2012

Я вижу ошибку в самой первой строке:

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

вы не указываете ни тип, ни имя первого параметра.вместе:

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

Затем назовите это:

[yourObject getQuoteMaps: aVarHere fromSubId: anotherVarHere];

или

[yourObject getQuoteMapsfromSubId: aVarHere];
2 голосов
/ 03 февраля 2012

В общем случае синтаксис вызова метода в Objective-C равен [object method:firstArgument parameter:secondArgument].Это открывающая фигурная скобка, объект, которому вы хотите отправить сообщение, а затем повторение подписи методов, включая имена параметров, но заменяющих параметры их аргументами.Можно утверждать, что это очень многословно, но это также очень хорошо читается.

Таким образом, в вашем конкретном случае правильный синтаксис будет

[appDelegate getQuoteMapsFromSubId:selectedSub]

при условии, что вы исправите объявление в

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

Теперь о точечном синтаксисе, который вы использовали.Синтаксис с точками можно использовать для вызова методов без параметров с возвращаемым типом, таких как методы получения свойств, или для вызова методов void с одним параметром в левой части выражения присваивания.Это должно действительно использоваться только для свойств, чтобы избежать путаницы людей.Вы можете найти больше информации здесь http://eschatologist.net/blog/?p=160

1 голос
/ 03 февраля 2012

Вы не можете вызвать метод с classInstance.methodName.

Правильный формат:

NSArray *quoteMapSection = [[appDelegate getQuoteMaps] fromSubId:selectedSubject.subject_id];
1 голос
/ 03 февраля 2012

Эта строка:

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; И пропустил первый аргумент, для которого вы вообще не указали цель.

...