' stringWithContentsOfURL/dataWithContentsOfURL '导致错误



由于某些原因,下面的代码偶尔可以工作。我已经检查了很多次URL,这并不有趣(它返回纯文本,我想解析)。代码是100%的功能,然后它就停止工作,并开始给我一个EXC_BAD_ACCESS错误。

调试输出中除了一行表示输出两次切换到进程之外,没有什么可发布的。(除了一些关于双重释放的事情。)

到目前为止(就我所能记得的)我已经试过了:

  • 重新安装应用程序-它只在"默认"运行时有问题(不是第一次运行/初始化运行)
  • 在浏览器(chrome, firefox, IE…)中运行URL
  • 将呼叫放入@try / @catch
  • 使用retain
  • 使用温度NSAutoreleasePool
  • 拆分/分离调用的元素(连同登录Everything - 一旦遇到错误,没有任何记录)
  • 使用dataWithContentsOfURL函数与上述

NSAutoreleasePool *tmpPool = [[NSAutoreleasePool alloc] init];
NSString *url_string = [self getNormalVersionDownloadURL];
NSLog(@"urlString: -%@-", url_string);
NSError *er;
NSURL *the_URL = [[NSURL URLWithString:url_string] retain];
NSString *version_String =  [NSString stringWithContentsOfURL:the_URL encoding:NSASCIIStringEncoding error:&er];
NSLog(@"verions_string: -%@-", version_String);
if ([version_String length] < 16)
    return;
[tmpPool release];

(NSAutoreleasePoolautorelease由于http://discussions.apple.com/thread.jspa?threadID=1667544添加)

(已兑现页面- http://webcache.googleusercontent.com/search?q=cache:8D7zlQdG9PMJ:discussions.apple.com/thread.jspa%3FthreadID%3D1667544+http://discussions.apple.com/thread.jspa%3FthreadID%3D1667544&cd=1&hl=en&ct=clnk&gl=us&source=www.google.com)

discussions.apple.com目前已关闭,因此我无法阅读讨论主题。无论如何:


NSString *url_string = [[self getNormalVersionDownloadURL] autorelease];

-getNormalVersionDownloadURL返回一个拥有的还是非拥有的对象?只有当方法返回一个已拥有的对象时,才发送-autorelease


NSError **er;

应该是NSError *er,或者应该用NSError *类型变量的地址初始化。由于后者不常见且不必要,下面假设NSError *er .


NSURL *the_URL = [[NSURL URLWithString:url_string] autorelease];

+URLWithString:返回一个你不拥有的NSURL对象,因此你不(自动)释放它。


version_String = [[NSString stringWithContentsOfURL:the_URL 
    encoding:NSASCIIStringEncoding error:er] autorelease]; //ERROR occurs here

两个问题::+stringWithContentsOfURL:返回一个你不拥有的NSString对象,因此你没有(自动)释放它。此外,第三个参数应该是&er而不是er

URLWithString和stringWithContentsOfURL是方便的方法,然后已经把变量自动释放,我不认为你需要添加自动释放,同时创建the_URL和version_String

尝试删除自动释放…

相关内容

  • 没有找到相关文章

最新更新