Xcode 8.3 和 Swift 3:在 UICollectionView 中的单元格中显示图像,从 URL 获取并存储在 NSMutableArray
Posted
技术标签:
【中文标题】Xcode 8.3 和 Swift 3:在 UICollectionView 中的单元格中显示图像,从 URL 获取并存储在 NSMutableArray【英文标题】:Xcode 8.3 and Swift 3 :Display Image in Cell in UICollectionView from URL fetched and Stored in NSMutableArray 【发布时间】:2017-08-23 08:45:45 【问题描述】:我已使用以下代码从 Web 服务获取数据
func ws_GetRelatedRresourcePath(_ RresourceId:Int, arrRresourceIDs:NSArray)
let refID = arrRresourceIDs.object(at: RresourceId);
AlbumModel.getRelatedRresourcePath(parameters: refID as AnyObject?) (responseObject,success) in
if(success)
let tempResp = responseObject;
if tempResp != nil
self.arrRelatedRresource.add(tempResp!)
else
if(responseObject != nil)
print(responseObject!);
if RresourceId < arrRresourceIDs.count - 1
self.ws_GetRelatedRresourcePath(RresourceId + 1, arrRresourceIDs: arrRresourceIDs);
else
print("Done.")
self.collectionSameSeriesMedia.reloadData();
self.setupMediaView();
AppUtils.stopLoading();
通过实现这一点,我得到了存储在名为 arrRelatedRresource 的 NSmutableArray 中的图像 URL。
我将这个数组传递给 cellForItemAt 如下
let cell = collectionSameSeriesMedia.dequeueReusableCell(withReuseIdentifier: "SameSeriesMediaIdentifier", for: indexPath) as! MediaDetailsCollectionViewCell
var strImagePath = arrRelatedRresource[indexPath.row] as! String
print(strImagePath);
strImagePath = (strImagePath as AnyObject).replacingOccurrences(of: "\\" , with: "");
strImagePath = strImagePath.replacingOccurrences(of: "\"" , with: "");
print(strImagePath)
cell.imgSameSeriesMedia.sd_setImage(with: URL(string: strImagePath))
return cell
已编辑:-(已解决)
问题在于存储数据的数组。该数组存储带有额外 "" 的 URL。 我通过在其中添加以下代码行解决了这个愚蠢的问题。
strImagePath = strImagePath.replacingOccurrences(of: "\"" , with: "");
问题由此解决。
【问题讨论】:
当有人要求您提供代码或说明时,您需要在您的问题中edit 该信息。请勿将其作为评论发布。 【参考方案1】:将 sd_setImage 与完成处理程序一起使用,并检查您是否获得了 nil 图像。
var strImagePath = arrRelatedRresource[indexPath.row] as! String
strImagePath = strImagePath.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed)!
let url = URL(string: strImagePath)
if let url = url
NSLog("url = %@",url)
cell.imgSameSeriesMedia.sd_setImage(with: url as URL!, placeholderImage: nil, options: SDWebImageOptions(), completed: (image: UIImage?, error: Error?, cacheType: SDImageCacheType, imageURL: URL?) in
if image != nil
cell.imgSameSeriesMedia.backgroundcolor = UIColor.green
else
cell.imgSameSeriesMedia.backgroundcolor = UIColor.blue
)
【讨论】:
我正在获取蓝色背景,即零图像。我也试过 print(cell.imgSameSeriesMedia.sd_setImage(with: URL(string:strImagePath as!String), placeholderImage: #imageLiteral(resourceName: "placeholderImage")))。但结果是()。你能建议对我的代码进行一些改进吗? 我也试过了。让 url = URL(string: strImagePath as!String) ---- print(url!) 。该应用因指令错误而崩溃。 这意味着你的网址是零。您应该尝试编码 url。 url = url.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed)! @AbhirajsinhThakore 请分享一个您收到的 urlString 示例。当您尝试将 strImagePath 转换为 url 时,它变为 nil 当我打印时(strImagePath)。结果是这样的“192.168.1.122/gallery/filestore/3/2_3c89ad1dcf88c1c/…”..以上是关于Xcode 8.3 和 Swift 3:在 UICollectionView 中的单元格中显示图像,从 URL 获取并存储在 NSMutableArray的主要内容,如果未能解决你的问题,请参考以下文章
Socket.IO 错误:zlib 没有这样的模块(Swift 3,Xcode 8.3)
Swift 3、iOS 10+、xCode 8.3+、Quickblox - 在保持纵横比/视频分辨率的同时切换全屏远程流
Xcode 8.3 Swift 3 FCM 通知上的 Firebase 问题 iOS 10.3 不起作用