【问题标题】:[__NSCFString absoluteString]: unrecognized selector sent to instance, attempt to convert url to string[__NSCFString absoluteString]:无法识别的选择器发送到实例,尝试将 url 转换为字符串
【发布时间】:2014-12-17 22:44:16
【问题描述】:

希望简单地将解析图像 url 转换为字符串,以便我可以使用 SDWebImage 进行缓存等。

经过研究,我发现我可以通过在 NSURL 上调用 absoluteString 来将 url 转换为字符串。我也试过这个:

NSURL *theUrl = [[obj objectForKey:@"image"] url];


NSString *finalUrl = [theUrl absoluteString];

[cell.carPhoto setImageWithURL:[NSURL URLWithString:finalUrl]
                           placeholderImage:[UIImage imageNamed:@"placeholder.png"]];

但我也因同样的错误而在这条线上崩溃

NSString *finalUrl = [theUrl absoluteString];

有什么想法吗?顺便说一句,obj 是一个 PFObject

【问题讨论】:

  • 显然这意味着[obj[@"image"] url] 正在返回NSString,而不是NSURL。查看您为“图像”键添加值的位置。您添加的是NSString,而不是NSURL
  • 看起来 [[obj objectForKey:@"image"] url] 是 NSString 而不是 NSURL。你可以试试 [cell.carPhoto setImageWithURL:[NSURL URLWithString:theUrl] placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
  • 为什么你认为你需要从 URL 转换为字符串,然后立即返回 URL?
  • obj 会不会是一个 PFFile 实例?如果是,url返回一个字符串,你不需要调用absoluteString,它已经是一个了。
  • 您的编辑不会改变任何东西。 [[obj objectForKey:@"image"] url] 仍然返回 NSString,而不是 NSURL。您的 theUrl 变量被声明为 NSURL 的事实无关紧要。分配给theUrl 的值实际上仍然是NSString

标签: ios objective-c sdwebimage


【解决方案1】:

错误消息告诉您,您有一个__NSCFString 的实例,并且您正在对它调用absoluteString__NSCFStringNSString 的一种,所以情况很简单,你期望(出于某种原因)你有一个NSURL,但实际上你有一个NSString - 所以你不需要打电话给@ 987654327@.

最好了解您为什么认为您有一个NSURL,以及您是否会在这段代码中拥有一个。输入应该确实是一致的,但如果不是,您可以检查类并决定如何获取字符串版本。

【讨论】:

    【解决方案2】:

    您似乎正在尝试使用此行将 NSString 转换为 NSURL

    NSURL *theUrl = [[obj objectForKey:@"image"] url];
    

    但这不是您将NSString 转换为NSURL 的方式,因此您的NSString 不会按照您的意愿更改为NSURL。相反,它似乎仍然是 NSString,因此出现了错误。

    如果NSURL 的唯一目的是通过访问其absoluteString 属性在下一行将NSString 转换回NSString,则无需将NSString 转换为NSURL;但如果您确实实际上需要 theURL 成为 NSURL 的原因超出了您发布的代码(例如,如果您需要稍后在代码中访问 NSURL 变量),请尝试使用此方法将您的字符串正确转换为 url:

    NSURL *theUrl = [NSURL URLWithString:[obj objectForKey:@"image"]];
    

    【讨论】:

    • 由于 OP 试图调用absoluteString,很明显目标是最终得到NSString。无需从NSString 创建NSURL,只需将其转换回NSString
    • @rmaddy 除非,就像我说的,他“需要 URL 实际上是一个 NSURL,原因超出了你发布的代码。”就像他需要在其他地方使用变量一样。除了那一行。
    • @rmaddy 我可以在我的回答中进一步澄清。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多