Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/103.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 为什么Xcode认为我的变量在返回NSRL,而它应该返回NSString?_Ios_Objective C_Xcode_Ios5_Ios6 - Fatal编程技术网

Ios 为什么Xcode认为我的变量在返回NSRL,而它应该返回NSString?

Ios 为什么Xcode认为我的变量在返回NSRL,而它应该返回NSString?,ios,objective-c,xcode,ios5,ios6,Ios,Objective C,Xcode,Ios5,Ios6,我收到以下警告:“从NSURL分配NSString的指针类型不兼容” 下面是有问题的代码: cell.articleURL.text = [self.articles[row] URL]; 我正在为标签指定文章对象的URL属性的值。self.articles数组仅用于保存项目对象 在文章类中,我有以下内容: @property (nonatomic, strong) NSString *URL; 为什么它认为它是一个NSURL?问题是self.articles[row]将返回一个类型为id的

我收到以下警告:“从NSURL分配NSString的指针类型不兼容”

下面是有问题的代码:

cell.articleURL.text = [self.articles[row] URL];
我正在为标签指定文章对象的URL属性的值。self.articles数组仅用于保存项目对象

在文章类中,我有以下内容:

@property (nonatomic, strong) NSString *URL;

为什么它认为它是一个NSURL?

问题是
self.articles[row]
将返回一个类型为
id
的对象,这意味着Objective-C运行时无法确定应用哪种方法实现。它在另一个接口中查找
URL
方法并使用该方法

马特·加拉赫的文章中有关于这个问题的更多信息

cell.articleURL.text = [self.articles[row] URL];
正如您所说的,
self.articles[row]
返回
id
,因此您需要将其类型强制为
Article

cell.articleURL.text = [(Article *)self.articles[row] URL];
您有一个名为URL的方法,该方法由
self.articles[row]
返回的对象调用,其返回类型为
NSURL


由于我找不到任何类具有名为
URL
的方法,因此在您正在使用的任何框架或类/库中都必须存在该方法,并且该方法正在被调用。

重构代码以避免混淆:

Article *article = self.articles[0];
cell.articleURL.text = article.URL;

正如Jim所说,编译器正在为
id
对象找到错误的
URL
方法。通过拆分代码,可以避免这个问题。

您的代码不知道数组的返回类型,因此可以猜测您可能从哪个类调用哪个方法。您需要像这样添加一个cast,它让编译器确切地知道需要哪个类:

cell.articleURL.text = [(Article *) self.articles[row] URL];

添加到@Jim answer。您需要将
[self.articles[row]]
的结果强制转换到正确的类,其中
@property(非原子,强)NSString*URL已声明。因此Objective-C运行时可以确定可以应用哪种方法实现

i、 e


或者将其存储在
Article
类型的变量中,然后调用该对象上的URL。

当您创建
NSMutableArray时,编译器不知道将存储哪种类型的对象。这是动态决定的。因此,当您试图从

[self.articles[row]URL]编译器将其视为id类型。因此,您必须使用类型cast
cell.articleURL.text=[(Article*)self.articles[row]URL]

您是否有一个名为URL的方法,它返回NSURL?好吧,这只是
self.articles[row].URL
的老生常谈,但由于
self.articles[row]
返回一个ID,我不得不使用该方法。我猜是get方法。您可以将
self.articles[row]
的输出转换到适当的类中,然后编译器会对其中任何一种表示法感到满意。但我仍然想知道,从哪里调用方法URL,因为他没有该方法,cocoa/touch框架也没有
[(Article *)[self.articles[row]] URL]