2016-10-31 12 views
0

私の質問はiOS Application Crash while UIImage loading (virtual memory not cleaning up) と非常によく似ています。私はオブジェクトの配列を持っていて、各オブジェクトは変数の1つとしてピクチャを持っています。上記の記事の答えは、オブジェクトが配列から削除された後もオブジェクトが残っているようです。しかし、私は彼がこの問題を解決するために何をしたのかを正確に把握していないようです。私はSwiftを使用しており、Objective-Cでの経験はありません。メモリの問題のためにUIImageを読み込んだときにiOSアプリがクラッシュする

誰かが彼の問題を解決するために行ったことを教えてください。答えの彼のサンプルコードは私には意味がありません。

var ArgeonHighmayne = Cards(name: "Argeon Highmayne", image : UIImage(named : "ArgeonHighmayne")!, manaCost : 0, rarity : "Basic", whichClass : "Lyonar", cardType : "General", tribe : "None", cardText : "Bloodborn Spell: Give a minion nearby your general +2 Attack.", set : "Core") 

と、これらのオブジェクトが配置されている配列:オブジェクトの初期化が少し次のようになります

open class Cards { 
    var name = "" 
    var image : UIImage! 
    var manaCost = 0 
    var rarity = "" 
    var whichClass = "" 
    var cardText = "" 
    var tribe = "" 
    var cardType = "" //Minion or Spell 
    var set = "" 


    init(name : String, image : UIImage!, manaCost : Int, rarity : String, whichClass : String, cardType : String, tribe : String, cardText : String, set : String) 
    { 
     self.name = name 
     self.image = image 
     self.manaCost = manaCost 
     self.rarity = rarity 
     self.whichClass = whichClass 
     self.cardType = cardType 
     self.tribe = tribe 
     self.cardText = cardText 
     self.set = set 
    } 

    deinit { 
     print("deinit " + name); 
    } 

} 

:ここ

は、画像プロパティが含まれて私のクラスであり、次のように表示されます。

public var newestCards = [DayWatcher, NightWatcher, DustWailer, QuartermasterGauj] 

私は宣言の前に "weak"を追加し、すべての "!"を追加するだけで、オブジェクト自体を弱い参照に変換できます。 「?」 Xcodeで追加する必要がありましたが、これで画像がコレクションビューに表示されなくなりました。 また、私はそうのようなクラス宣言自体に「弱い」追加してみました:

weak var image : UIImage! 

しかし、これは単に表示されない画像が生じました。 ご協力いただきありがとうございます。

+0

大文字で 'var ArgeonHighmayne'を宣言するのはなぜですか?それはクラスかvarか? – mat

+0

@matクラスのインスタンスです。 –

+0

"ArgeonHighmayne"という名前のファイルがありますか? UIImage(名前: "ArgeonHighmayne")! –

答えて

0

イメージが配列の一部であったため、クラッシュしていました。クラス内にUIImageを置くのではなく、そこに画像の名前を入れ、collectionViewメソッドでその名前のUIImageを呼び出す方が良いでしょう。

関連する問題