2012-02-23 41 views
-1

可能重複:
How do I use NSTimer
Decrement Issue不正確的減量

我真的很努力擺脫如下警告:

i。對象的引用計數的遞減不正確此時不屬於主叫方。

代碼編譯良好,應用程序似乎工作正常。基本上我試圖創建一個類的對象來播放短按音頻片段時按下按鈕。我創建了一個類來播放該文件,並且這些對象將文件名稱作爲字符串傳遞。

下面是代碼:

- (IBAction) playKick 
{   
    PlayAudio *thisPlayAudio= [[[PlayAudio alloc] init] playFile:(@"RockSnare")]; 
    [thisPlayAudio release]; 
} 

我讀過的其他職位和任何幫助,將不勝感激!

+0

使它autorelease。 – fibnochi 2012-02-23 15:27:52

+0

嘿謝謝你的迴應!我嘗試使用此代碼自動釋放 - (IBAction)playKick PlayAudio * thisPlayAudio = [[[[PlayAudio alloc] init] playFile:(@「file」)] autorelease]; }但後來我得到一個'未使用變量'的警告,'分析儀'警告仍然沒有去! – Martin 2012-02-23 15:58:21

+1

這段代碼看起來很好(如果寫得有點不合常規,可能依靠實現細節)。你確定問題出在這個方法上嗎?警告指出什麼? – Jasarien 2012-02-23 16:01:24

回答

1

playFile:方法的返回類型是什麼?你確定它返回你調用它的同一個對象嗎?

也許你的代碼應該是:

PlayAudio *thisPlayAudio= [[PlayAudio alloc] init]; 
[thisPlaysAudio playFile:@"RockSnare"]; 
[thisPlaysAudio release]; 

甚至

[[[[PlayAudio alloc] init] autorelease] playFile:(@"RockSnare")]; 
2

我必須看到PlayAudio的類定義,但是懷疑playFile方法返回它的PlayAudio實例。你可能希望這樣的:

PlayAudio *thisPlayAudio = [[PlayAudio alloc] init]; 
[thisPlayAudio playFile:(@"RockSnare")]; 
[thisPlayAudio release]; 
2

也許這將有助於:

- (IBAction) playKick { 
    PlayAudio *thisPlayAudio= [[PlayAudio alloc] init]; 
    [thisPlayAudio playFile:(@"RockSnare")]; 
    [thisPlayAudio release]; 
} 

這完成創建對象並將其分配給thisPlayAudio,然後播放音頻。你有什麼將thisPlayAudio設置爲playFile調用的結果。

+0

嘿,大家非常感謝你花時間回覆!我真的很感激它。對不起,我發佈了兩次這個問題。我不確定它最初是否正確發佈。並感謝Almo!上面的工作!我可能會在我走路之前試着跑步!祝願所有人。 Martin – Martin 2012-02-23 20:29:03

+0

這個問題似乎已經與其他問題合併了,因此您可能需要通過單擊checkmar來選擇最有助於解決問題的答案。現在你知道系統在下一次需要幫助時如何工作。 :) – Almo 2012-02-23 21:02:47

1

您正在試圖創建後立即釋放對象。也許,你在playFile方法中也做錯了什麼。你的播放器將不會播放任何文件,因爲你在一個範圍內創建並刪除它。試試這個:

PlayAudio *thisPlayAudio = nil; 
- (IBAction) playKick { 
    if (thisPlayAudio){ 
     [thisPlayAudio release]; thisPlayAudio = nil; 
    } 
    thisPlayAudio= [[PlayAudio alloc] init] autorelease]; 
    [thisPlayAudio playFile:(@"RockSnare")]; 
} 
+0

嘿非常感謝你的幫助!我已經把它整理好了! – Martin 2012-02-23 20:30:03