Помогите расшифровать строку NSString "передача аргумента ... из отдельного предупреждения типа Objective C" - PullRequest
0 голосов
/ 17 января 2010

У меня проблемы с расшифровкой "передаваемого аргумента ... из отдельного предупреждения типа Objective-C".

У меня есть константа, объявленная как:

extern NSString * const URL_1;

и определяется как:

NSString * const URL_1 = @"http://someurl";

Если я, скажем, назначу эту константу для строки NSS следующим образом:

NSString *URL = nil;
...
URL = [[NSString alloc] initWithString:URL_1];

И передать эту строку NSString в качестве аргумента функции, ожидающей строку NSString:

ViewController *viewController = [[ViewController alloc] initWithURL:URL];

Подпись функции:

- (id)initWithURL:(NSString *)URL

Я получаю предупреждение о том, что я "передаю аргумент 1 'initWithURL': от отдельного типа Objective-C"

Насколько я понимаю, объекты NSString являются неизменяемыми после создания, и я присваиваю значение строке один раз при создании, поэтому я не понимаю, почему постоянная природа URL_1 должна вызывать проблемы.

Я уверен, что я здесь пончик и что-то упустил из виду! Пожалуйста, кто-нибудь может помочь мне разрешить это предупреждение? Большое спасибо заранее!

1 Ответ

2 голосов
/ 17 января 2010

В системных средах есть много методов, которые объявлены как:

- (id)initWithURL:(NSURL *)anURL;

И, конечно, +alloc объявляется как:

- (id) alloc;

Таким образом, когда компилятор видит:

ViewController *viewController = [[ViewController alloc] initWithURL:URL];

Возвращаемый тип выделения - id, и компилятор, вероятно, видит вышеуказанное объявление, и это вызывает предупреждение. Теперь, как правило, компилятор также предупреждает, что он нашел несколько сигнатур для селектора - несколько сигнатур для этого конкретного имени метода.

Если это не так, вполне вероятно, что вы не импортировали ViewController.h в файл, содержащий строку кода выше.

Короче говоря, не объявляйте метод с тем же именем, что и другой метод, который принимает аргументы другого типа.

...