我想把幾個CGImageRefs放入一個NSArray。它的工作原理應該是在模擬器上,但不是在設備上 - 它在我試圖用EXC_BAD_ACCESS code = 1錯誤形成陣列時崩潰。我也試過其他的東西,比如從一個可變數組開始,但它也不起作用。在控制檯中輸入BT的結果是CGImageRef的NSArray的問題(但不是在模擬器上!)
(lldb) bt
* thread #1: tid = 0x2403, 0x3a9b25b6 libobjc.A.dylib`objc_msgSend + 22, stop reason = EXC_BAD_ACCESS (code=1, address=0x86ea78f7)
frame #0: 0x3a9b25b6 libobjc.A.dylib`objc_msgSend + 22
frame #1: 0x32a98b5e CoreFoundation`+[__NSArrayI __new:::] + 58
frame #2: 0x00042388 NameOfMyApp
所以基本上我有很多圖片的信件,的,我有代表字位置的層數應在每個週期通過他們。例如,layer1顯示letterC,然後顯示letterF,然後顯示letterP等,而layer2顯示其他順序。
我想我會加載每個字母一次......
CGImageRef letterH = [UIImage imageWithContentsOfFile:letterHfilename].CGImage;
CGImageRef letterI = [UIImage imageWithContentsOfFile:letterIfilename].CGImage;
...並把CGImageRefs在一個NSArray財產,強制轉換爲ID:
self.titleLetters = @[(__bridge id)letterH, (__bridge id)letterI;
我後來做另一個數組中
layerN.contents = self.titleLetters[i];
,但更重要的是我必須能夠把他們(每個可能的時間):
[contentsValuesArray addObject:self.titleLetters[j]];
,然後使用該陣列作爲keyFrameAnimation的值:
CAKeyframeAnimation* contentsAnim = [CAKeyframeAnimation animationWithKeyPath:@"contents"];
contentsAnim.values = contentsValuesArray;
所有這每次工作正常在模擬器。
正如我所說的,我嘗試了一些變化,並且似乎工作的唯一情況是當我使用arrayWithObject形成一個只有一個letter-imageref的可變數組時。即使那樣,它也只是有效,它在我的程序中進一步崩潰。
我似乎已經讀過CGImageRefs沒有保留的地方,這樣它們可能會在我使用它們之前被釋放。自從ARC開始編寫代碼以來,我對釋放知之甚少,因爲它一直在模擬器上工作,所以我認爲這不適用於我的情況。
而且,在此回覆:
How do I create a mutable array of CGImageRefs?
在Cocoa框架中工作的人說,它應該工作,雖然他沒有給出任何細節,所以它可能是暗示。
任何幫助和建議,將不勝感激。
編輯解決 看來,這個問題的確,當我試圖將它們添加到陣列的imagerefs是不存在的,這是因爲他們已經被釋放了。顯然他們需要使用CGImageRetain來保留。它現在可以工作,我只需要確保它們在事後發佈。
任何你不能簡單地使用UIImages的原因? – DarkDust 2013-04-24 20:13:09
你從來沒有真正說過(除非它是在最後幾段中不必要的長),實際上失敗以及如何。 – 2013-04-24 20:18:53
@熱舔,我不知道什麼是失敗,但正如我在合理簡短的第一段中說,它當我嘗試做self.titleLetters =(橋接CGImageRefs數組)時崩潰。我只是在這個xcode視圖中看起來像機器代碼或其他東西,對我來說完全沒有意義,而且我找不到任何可讀的解釋。 – Gusutafu 2013-04-24 20:27:13