【问题标题】:iOS: NSString loses URL, (null) is showniOS:NSString 丢失 URL,显示 (null)
【发布时间】:2012-06-01 13:35:42
【问题描述】:

到目前为止,这是我的代码:

NSString *listedImageURL = listedProduct.image;

NSLog(@"URL: %@", listedImageURL);

此代码运行良好,NSLog 显示正确的 URL。但是当我尝试下面的代码时,NSLog 出现了(null):

NSString *listedImageURL = listedProduct.image;

NSURL *imageURL = [NSURL URLWithString:listedImageURL];
NSData *imageData = [NSData dataWithContentsOfURL:imageURL];
UIImage *image = [UIImage imageWithData:imageData];

我做错了什么??

【问题讨论】:

  • 你想NSLogUIImage *image还是NSString *listedImageURL
  • 你在哪里有给出 (null) 的 NSLog,它是什么样的?
  • 尝试使用NSLog(@"%@", [imageURL absoluteString]); 访问网址NSLog。它显示了正确的 URL?
  • 嗯,这真的很奇怪。 NSLogging NSData 结果(空)?
  • 您是否尝试将UIImage *image 设置为某个UIImageView

标签: ios xcode url nsstring null


【解决方案1】:

我相信 relower 是在正确的轨道上,文档指出:

此方法要求 URLString 包含任何必要的百分比转义码,即“:”、“/”、“%”、“#”、“;”和“@”。请注意,“%”转义是通过 UTF-8 翻译的。

我相信,如果您要发布一些您正在转换的 URL 示例,那么确定哪些字符可能会给您带来问题会很有帮助。

我建议记录:listedImageURL

然后也运行:

NSString *escapedImageUrl = [listedProduct.image stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

然后记录。

这应该让你看到什么被逃避了,什么被遗漏了。它可以是一个杂散空间这样简单的东西。

您也可以尝试使用 NSASCIIStringEncoding 而不是 NSUTF8StringEncoding,看看是否会有所不同。

【讨论】:

  • 是的,这可行,但现在我的日志看起来像:%0A%0Ahttp://www.google.com/image.png :S
  • 那是你的问题。 %0A 是换行符。我的猜测是,当您解析字符串时,您会在前面包含两个换行符。检查您是如何读取该字符串的,看看您是否可以删除这些字符串。这样做,然后@relower 下面给你的代码可能对你有用。
  • 我从 xml 文件 (<image>http://www.google.com/image.png</image>) 中解析 URL。没有换行符:S
  • 他们来自某个地方,我最好的猜测是 XML 不干净。我建议保存它的副本并在 Notepad++ 之类的程序中打开它,这样您就可以看到隐藏的控制字符,例如换行符。你可以自己测试一下,看看是否有影响。不要将listedImageURL 设置为XML 中的变量,而是使用@"" 表示法手动将其写入。然后运行其余代码,您可能会发现它可以工作。
  • 嘿 keab42,我搞定了 :) 看看这个:NSString *listedImageURL = [[listedProduct.image stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding] stringByReplacingOccurrencesOfString:@"%0A" withString:@""];
【解决方案2】:

它可以为空,因为你的字符串到 url 的转换。

试试下面的代码;

NSString *listedImageURL = [listedProduct.image stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *imageURL = [NSURL URLWithString:listedImageURL];
NSData *imageData = [NSData dataWithContentsOfURL:imageURL];
UIImage *image = [UIImage imageWithData:imageData];

我认为对你有用。祝你好运。

【讨论】:

  • 谢谢你,但我不能同意你的回答。也许 url 来自 xml 文件的信息(但在 NSLog 中完美显示)可以帮助解决问题。上面的代码也在 cellForRowAtIndexPath 函数中。
  • 你试过我写的代码了吗?如果它不起作用,我认为还有其他问题。
  • 你能把你的url字符串写在这里吗?
  • 另外,你可以查一下,stackoverflow.com/questions/8486435/…
  • 我只是想看看你的“listedImageUrl”,你是想从包或应用程序文档目录中获取图像吗?
猜你喜欢
  • 1970-01-01
  • 2020-10-31
  • 1970-01-01
  • 1970-01-01
  • 2019-07-21
  • 2014-06-09
  • 1970-01-01
  • 1970-01-01
  • 2018-03-27
相关资源
最近更新 更多