我使用Sparrow框架(V2),我有一個很奇怪的問題,這可能是與麻雀有關,或者它可能與Obj-c有關。我正在爲項目使用ARC。與塊和引用的奇怪問題
我創建一個影片剪輯這是一個骰子動畫,然後我添加一個監聽器,並使用塊刪除動畫和影片剪輯,這樣的..
diceAnimationPlayer1 = [self getAnimation:atlasName1 fName:frameName1 nFrames:12];
__weak SPMovieClip *weakMC = diceAnimationPlayer1;
__weak SPSprite *weakSP = villageSprite;
[diceAnimationPlayer1 addEventListenerForType:SP_EVENT_TYPE_COMPLETED block:^(SPEvent *event)
{
[Sparrow.juggler removeObject:weakMC];
[weakSP removeChild:weakMC];
}];
這所有作品精細。如果我不想在此時刪除動畫片段,但想在稍後的日期刪除diceAnimationPlayer1,則說明問題出在另一個動畫完成後。如果我嘗試做
[villageSprite removeChild:diceAnimationPlayer1];
它不僅不會刪除動畫片段,而且會將動畫片段更改爲新的阿特拉斯! (我有6個骰子圖集,每邊一個),所以骰子在最後一幀變成一個新數字。
我檢查過是否在另一個頂部創建了一個動畫片段,也許有2個動畫片段,但據我所知,我不是,這很奇怪。
有沒有人有任何想法可能會導致此?無論如何,我並不完全理解所有這些薄弱的業務,而是以某種方式創造一個全新的對象的弱點參考? (即使在調試中檢查變量似乎顯示它們都指向相同的東西)。
還添加到下面的答案(這不幸並沒有解決問題),爲什麼不刪除該對象?
diceAnimationPlayer1 = [self getAnimation:atlasName1 fName:frameName1 nFrames:12];
__weak __block SPMovieClip *weakMC = diceAnimationPlayer1;
__weak __block SPSprite *weakSP = villageSprite;
[diceAnimationPlayer1 addEventListenerForType:SP_EVENT_TYPE_COMPLETED block:^(SPEvent *event)
{
[Sparrow.juggler removeObject:weakMC];
[villageSprite removeChild:diceAnimationPlayer1];
//[weakSP removeChild:weakMC];
}];
我得到相同的結果,骰子動畫不會被刪除,它只是切換到另一個地圖集顯示不同的最終數字。
我不確定它會有幫助,但是您是否嘗試將__block與__weak?例如__weak __block SPMovieClip * weakMC = diceAnimationPlayer1; __weak __block SPSprite * weakSP = villageSprite; – taffarel
你可以把它作爲答案,讓我可以更好地看到格式,但我不完全明白__block的意思嗎? – Phil