Объявить как NSString, но Xcode обрабатывать как NSdata и получить несовместимую передачу - PullRequest
2 голосов
/ 03 марта 2012

Я пытаюсь передать объект адреса NSString в текст UILabel, но я получил предупреждение от компилятора XCode о несовместимом указателе, как показано на снимке экрана ниже:

incompatible pointer type warning - screenshot

И на снимке экрана ниже вы можете видеть, что мой адресный объект объявлен как NSString.

property type - screenshot

Я попытался отобразить мою NSString с помощью:

    NSLog(@"%@",[[LocationData objectAtIndex:rowDisplay] address]);

и работает без каких-либо несовместимых ошибок указателя.Может кто-нибудь, пожалуйста, помогите?Я провел некоторые исследования, но до сих пор не могу найти никакого решения.

Мой адрес - это объект, который сохраняется в NSArray.Формат адреса всегда один и тот же, например, «542 W 112 St New York NY 10025».

Спасибо.

Ответы [ 2 ]

4 голосов
/ 03 марта 2012

Это может быть связано с тем, что в некоторых классах SDK уже есть метод / свойство с именем address, и оно возвращает NSData *.

NSArray 'objectAtIndex: возвращает объект типа id, и компилятор не знает, что это ваш пользовательский класс, для которого определено address для возврата NSString *. Когда он пытается сопоставить селектор address, он берет тот из SDK, а не ваш.

Однако вы можете привести возвращенный объект к вашему классу и вызвать метод address:

[(YourClass *)[LocationData objectAtIndex:rowDisplay] address];

Вы не видите предупреждение при выводе address в NSLog, поскольку формат %@ принимает и NSString *, и NSData * (для классов, отличных от NSString, фактически выводится результат description метод, который возвращает NSString *).

1 голос
/ 03 марта 2012

есть много последующих вопросов с вашим вопросом.Тем не менее, вы сказали, что вы можете показать с:

NSLog(@"%@",[[LocationData objectAtIndex:rowDisplay] address]);

, так почему бы не использовать это в UILabel:

self.displayAddress.text =  [NSString stringWithFormat:@"%@"[[LocationData objectAtIndex:rowDisplay] address]];

PS: пожалуйста, не используйте изображение для 1 строкикод.Я должен перепечатать ваш код здесь ...

...