声明为NSString,但Xcode视为NSdata&收到不相容的传球

时间:2012-03-03 13:58:05

标签: iphone xcode nsstring nsdata incompatibility

我正在尝试将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 个答案:

答案 0 :(得分:4)

这可能是由于某些SDK类中已存在名为address的方法/属性,并且它恰好返回NSData *

NSArray的{​​{1}}返回objectAtIndex:类型的对象,编译器不知道它是定义为id的自定义类,以返回address 1}}。当它尝试匹配NSString *选择器时,它会从SDK获取,而不是你的。

但是,您可以将返回的对象强制转换为您的类,并将方法address调用:

address

[(YourClass *)[LocationData objectAtIndex:rowDisplay] address]; 输出到address时,您看不到警告,因为NSLog格式同时接受%@NSString *(对于{{1}以外的类1}}它实际输出NSData *方法的结果,返回NSString)。

答案 1 :(得分:1)

您的问题有很多跟进问题。但是,你说,你可以用:

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

所以为什么不将它用于UILabel

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

PS:请不要将图像用于1行代码。我必须在这里重新输入你的代码...