-(void)performResearch:(NSString *)aString {
NSLog(@"Received Request!");
[[researcher mainFrame]
loadRequest:[NSURLRequest
requestWithURL:[NSURL URLWithString:aString]]];
}
В моем другом классе я вызываю функцию следующим образом:
Researcher *res = [[Researcher alloc] init];
[res performResearch:@"http://www.twitter.com"];
[res release];
В пределах performResearch:
объект, которому вы отправили сообщение performResearch:
в последнем коде, — это self
. researcher
— какая-то другая переменная; вы разговариваете с другим объектом, который, вероятно, не является этим Исследователем.
В ваш комментарий к ответу Колина Гисласона, вы говорите, что researcher
не Researcher, а WebView. Было бы неплохо исправить этот неточный выбор имени переменной.
После того, как вы переименовали переменную во что-то более точное, например webView
, вам нужно убедиться, что в ней что-то есть. Простое наличие переменной бесполезно; вам нужно иметь указатель на объект в переменной. В противном случае указатель в переменной равен nil
, а сообщения в nil
вообще ничего не делают. Они не падают, не терпят неудачу, не достигают успеха, не ломаются — выполнение продолжается, как будто ничего не произошло, потому что оно произошло.
Вы говорите, что переменная является IBOutlet; это означает, что вы хотите подключить розетку в IB. Одной из возможных причин вашей проблемы является то, что вы забыли это сделать, что объясняет переменную, содержащую nil
. Убедитесь, что он подключен в IB.
Другая возможная причина вашей проблемы заключается в том, что этот наконечник не был загружен. Если объект Researcher владеет пером, то, как правило, он несет ответственность за его загрузку, а это значит, что вам нужно это сделать. Если какой-то другой объект загружает перо с Researcher и WebView, то ваше создание другого объекта Researcher в последнем фрагменте кода неверно; этот второй объект Researcher не имеет отношения к объекту в nib и не имеет WebView из какого-либо источника. В этом последнем случае вам придется вырезать создание объекта Researcher и использовать тот, что в nib.
Это последнее решение может потребовать добавления выхода к объекту, класс которого содержит второй фрагмент кода. Я не одобряю это решение. Трудно сказать, что вам следует делать, потому что я не уверен, где объекты Researcher вписываются в триумвират MVC. Я подозреваю, что вам нужно еще немного подумать о том, к какой категории он относится; Я думаю, что это должен быть Контролер, и что вам нужно будет сделать некоторый рефакторинг, чтобы восстановить границы, которые вы должны иметь между полномочиями.
Неспособность поддерживать MVC в вашем приложении обычно приводит к тому, что Cocoa становится сложнее использовать, чем обычно.
person
Peter Hosey
schedule
27.02.2010