NSData返回Null但NSURL与NSString值正常的技术问题排查
解决NSData从URL加载返回Null的问题
嘿,我瞅了下你的代码和日志,问题其实挺明显的——你的图片URL缺少协议头(http:///https://)!
你看日志里的urlstr是demo.esenseit.in/Alec1-Admin-Panel-and-API/alec_api/upload/car_8_1514810479.jpg,虽然NSURL能把它解析成一个对象,但实际请求的时候,系统不知道该用HTTP还是其他协议去获取这个资源,自然就打不开文件,返回Null了。
给你几个解决办法:
- 直接拼接协议头:如果API返回的
car_image字段本来就是不带协议的相对路径,那手动加上http://就行:NSString *rawImagePath = [[responseArr valueForKey:@"car_image"] objectAtIndex:1]; NSString *urlstr = [@"http://" stringByAppendingString:rawImagePath]; - 更严谨的判断:怕以后API返回带协议的URL重复拼接?可以加个判断:
NSString *rawImagePath = [[responseArr valueForKey:@"car_image"] objectAtIndex:1]; NSString *urlstr; if (![rawImagePath hasPrefix:@"http://"] && ![rawImagePath hasPrefix:@"https://"]) { urlstr = [@"http://" stringByAppendingString:rawImagePath]; } else { urlstr = rawImagePath; } - 额外提个小建议:
dataWithContentsOfURL:是同步请求,要是在主线程调用会卡住UI,建议换成NSURLSession的异步任务来加载图片数据,用户体验会好很多。
改完之后再试试,NSData应该就能正常加载到图片数据啦!
内容的提问来源于stack exchange,提问作者Prez
相关产品推荐
相关产品推荐

