2017-02-11 10 views
0

UITableViewCellの機能イメージキャッシュの作成に大きな助けを借りてcellForRowAtIndexでした。残念ながら、下記のコードでは、1つの画像しか繰り返し表示されません。私はcellForRowAtIndexPathがforループのようで、それぞれrowのために再び走っていたという印象を受けました。したがって、私はなぜ1つの画像しか表示されないのだろうかと思っています。UITableViewCellのイメージキャッシュを作成しましたが、1つのイメージしか表示されません。

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: "restaurantcell") as? RestaurantTableCell 
    var oneRestaurant: Restaurant = tablerestaurantarray[indexPath.row] 

    if let cachedVersion = cache.object(forKey: "image") { 
     oneRestaurant = cachedVersion 
    } else { 
     cache.setObject(oneRestaurant, forKey: "image") 
    } 

    cell?.picture?.image = oneRestaurant.value(forKey: "image") as! UIImage? 

    let restaurant = restaurantArray[indexPath.row] 
    cell?.name?.text = restaurant.value(forKey: "Name") as? String 

    return cell! 
} 

アップデート2:あなたは、異なるオブジェクトに同じNSCacheキー("image")を使用

Results from the added breakpoint

+0

セルの高さはどれくらいですか?ストーリーボードのデフォルト画像は何ですか?私が理解しているところから、あなたはクラス「レストラン」からイメージを取得します。あなたはそのクラスも投稿できますか? –

+0

単純な "var image = UIimage?"クラスのために。 – Jon

答えて

0

。そのため、最初のRestaurantオブジェクトだけがキャッシュに保存されます。他のすべてのセルについては、キー"image"のためにキャッシュされたオブジェクトを探し、先に保存したRestaurantオブジェクトを戻します。

異なるRestaurantオブジェクトをキャッシュするには、異なるキーを使用する必要があります。

let key = "restaurant \(indexPath)" 

if let cachedVersion = cache.object(forKey: key) { 
    oneRestaurant = cachedVersion 
} else { 
    cache.setObject(oneRestaurant, forKey: key) 
} 

なぜレストランオブジェクトをキャッシュしたいのかよく分かりませんが、キャッシュパスにインデックスパスを追加してください。あなたはすでにtablerestaurantarrayにそれらを持っているので、それらをキャッシュするメリットはありません。多分あなたの意図はイメージをキャッシュしていたでしょうか?

+0

これらの画像はクラウドキットからダウンロードされ、キャッシュが作成されるまでtableviewアニメーションが不安定になりました。少なくとも、それは私の考えです。 – Jon

+0

私は、ckrecordsの画像は、画像データを受け取るためのクラスを渡された追加する必要があります。 – Jon

+0

提案された「let key = 'restaurant \(indexpath)」は残念なことに機能しませんでした。 – Jon

関連する問題