NSURL 总是 nil 使用 URLWithString

Posted

技术标签:

【中文标题】NSURL 总是 nil 使用 URLWithString【英文标题】:NSURL always nil using URLWithString 【发布时间】:2014-03-22 04:01:31 【问题描述】:

我正在从 API 接收图像的 url,这些图像我想在集合视图中显示。

这是我的代码

NSString *str = [imgArray objectAtIndex:indexPath.item];

frstUrl=[NSURL URLWithString:str]; // <-- (APP Crash here )

[imageView setImageWithURL:frstUrl
          placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
[imageView setImageWithURL:frstUrl];

错误信息:

[__NSArrayI 长度]:无法识别的选择器发送到实例 0xd769560


str 对象的NSLog 返回:

str=( ("hello.com/projects/newapp/uploads/…;, "hello.com/projects/newapp/uploads/…;,

【问题讨论】:

能否展示一下您的 imgArray 数组内容? 检查 str 的类以确保它实际上是一个字符串。 看来对[imgArray objectAtIndex:indexPath.item];的调用实际上是给你另一个NSArray @GenieWanted frstUrl 从未创建 - 应用在创建过程中崩溃。 在NSLog中检查你的str(@"str :%@", str); 【参考方案1】:

该错误告诉您从imgArray 检索到的对象不是NSString,而是它本身就是NSArray。检查您检索到的内容(NSLog 它或在调试器中检查它),您会发现它是一个数组。

例如,如果imgArray 中的关联对象本身返回另一个数组,那么您必须从中获取详细信息。例如,如果该数组中的第一项是图像 URL 字符串,那么您将执行以下操作:

NSArray *imgDetailsArray = imgArray[indexPath.item];

// let's assume that the first item in that array was the URL string, so let's grab the first item

NSString *str = imgDetailsArray[0];

// now we can use that string

frstUrl=[NSURL URLWithString:str];

[imageView setImageWithURL:frstUrl
          placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
[imageView setImageWithURL:frstUrl];

【讨论】:

我已经用调试器检查了它,imgArray 和 NSSting 返回相同数量的元素,但问题在这里 frstUrl=[NSURL URLWithString:str]; // @user3382857 问题是你的imgArray 不是一个简单的字符串数组。它似乎是一个数组数组。所以[NSURL URLWithString:str] 返回一个数组,而不是字符串。您可能想要NSLog imgArray 并编辑您的问题以包含结果。你说你登录了str 并且“它的返回图像 url 和它返回的 url 数量是 10”。这就是我的观点。这不是一个简单的字符串。 我明白了你的意思,我收到了类似 str=((这里是我的 10 网址))的回复,我 cnt 分享我的网址,请原谅 @user3382857:如果它被记录为( ( oneArray, secondArray ... ) ),带有两组括号,那么您的 URL 数组包含在另一个数组中,正如 Rob 所说,[imgArray objectAtIndex:indexPath.item] 正在返回一个数组因为这就是imgArray 中的内容。

以上是关于NSURL 总是 nil 使用 URLWithString的主要内容,如果未能解决你的问题,请参考以下文章

即使在使用字符串初始化之后,NSURL 对象也是 nil

从 String 到 NSURL 的转换不断返回 nil

Convert String to NSURL is return nil in swift

IOS Swift Amazon S3 传输实用程序 - nil 与预期的参数类型 nsurl 不兼容

NSURL baseURL返回nil。获取实际基本URL的任何其他方式

iOS NSURL 请求状态码总是 200