当前位置:   MFC > 正文

Cocoa Webkit bug?

cocoa,webkit,nsarray,webview,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳,在线开发工具,前端开发工具,开发人员工具,站长工具

我有一些代码从数组中获取URL并将其存储为字符串然后使用该字符串加载URL.

NSString *first = [urls objectAtIndex:[sender clickedRow]];
NSLog(@"%@", first);
[[webview mainFrame] loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:first]]];

但是,当我运行这个时,我收到此错误:

-[NSURL length]: unrecognized selector sent to instance 0x164dc0

本案例中的链接是http://www.digg.com

我知道这个bug就行了

NSString *first = [urls objectAtIndex:[sender clickedRow]];

因为我尝试将字符串的值直接设置为URL而不是数组,并且它有效.



1> Peter Hosey..:

但是,当我运行这个时,我收到此错误:

-[NSURL length]: unrecognized selector sent to instance 0x164dc0

首先,这是一个例外,而不是错误.

当你收到这样的消息时,请阅读它的内容:

-[NSURL

您发送此消息的对象是NSURL对象.

length]:

消息的选择器是length.

现在,为什么要向lengthNSURL对象发送消息?你不会,而你自己也没有这样做.其他的事情.

但是你会向length一个字符串对象发送一条消息.所以,你有一个NSURL对象,你把它传递到一个预期字符串的地方.

您展示的代码中只有一个段落:

[NSURL URLWithString:first]

例外情况告诉你,这first已经是一个NSURL; 它不是一个字符串.您不需要从中创建NSURL,因为它已经是一个,并且尝试以任何方式将其视为字符串将导致异常.

您可能会因为上一行的理由而反对我的主张:

NSString *first = [urls objectAtIndex:[sender clickedRow]];

你的反对意见是声明明确说明first是指向NSString的指针,所以我一定是错的.

但事实并非如此.您声明 first为指向NSString的指针.也就是说,你告诉编译器该变量first将保存一个指向NSString的指针.

但是你将一个指向NSURL的指针放入变量中.

在许多情况下,编译器会警告你,你已经撒谎,但在这种情况下它不会因为对象通过objectAtIndex:而返回id; 因此,编译器不知道您将哪种类型的对象放入变量中.编译器,假设您说出了真相,并且确实在这里放置了NSString,并不会对此初始化发出警告.

但你不是.正如您在运行时发现的那样,该对象是NSURL.

修复是双重的:

    通过将变量声明为NSURL *,而不是将变量声明为声明NSString *.

    不要尝试在这里创建NSURL,因为你已经有了NSURL.

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/blog/MFC/detail/21695
推荐阅读
相关标签
  

闽ICP备14008679号