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 - Xcode 8.3 自动完成未显示

Swift 3、iOS 10+、xCode 8.3+、Quickblox - 在保持纵横比/视频分辨率的同时切换全屏远程流

Xcode 8.3 Swift 3 FCM 通知上的 Firebase 问题 iOS 10.3 不起作用

在 Xcode 8.3 中,一些 swift 类文件是红色的

目标 C 项目中的 Xcode 8.3 Swift 版本错误 (SWIFT_VERSION)