2010-02-16 2 views
1

Я разрабатываю приложение для викторины. Я беру вопросы из XML-файла, разбираю его и выставляю случайные вопросы. Они хранятся в NSdictionary и NSMutableArray. Также приложение воспроизводит фоновую музыку и звук для нажатия кнопок (AVAudioPlayer). и вибрация (AudioServicesPlaySystemSound (kSystemSoundID_Vibrate))ОШИБКА: Утечка памяти, форматы данных временно недоступны

В одной конкретной функции, если я пытаюсь освободить временные переменные, которые я использую (I.E NSDictionary и NSMutableArray), приложение вылетает, и я снова получаю эту функцию. Следовательно, если я освобожу их, он отлично работает, но в конечном итоге сбой «EXC_BAD_ACCESS» ERROR. Он не указывает на какую-либо строку или функцию.

Когда я использовал инструмент «LEAKS», он показал, что у меня было около 7000 утечек. Я не понимаю, как использовать этот инструмент, но я уверен, что я не создаю так много переменных, jus несколько и даже те, которые я выпускаю.

И как только я получил сообщение об ошибке «данные, которые временно недоступны».

Любая идея, что я делаю неправильно ??? F1 :)

PS: мой код - все просто, плюс я не знаю, в чем проблема, поэтому я не знаю, какой код следует публиковать здесь? Также я хотел бы знать, если я создать NSString * в функции для использования темп я должен выпустить его в конце функции (я бы отпустить) EDIT:

-(void) loadQuestion 
    { 
    strCorrectAnswer = @""; 
    int intQuestionNo; 
    NSString *strQuestionNo = [[NSString alloc] init]; 

    // get random question out the xml file 
NSDictionary *dctQue = [dctQuestions objectForKey:strQuestionNo]; 
// blah blah 

    // jumble the answers to be displaed 


NSMutableArray *answerJumble = [[NSMutableArray alloc] init]; 
NSMutableArray *answers =[NSMutableArray arrayWithObjects:[dctQue objectForKey:@"WrongAnswer1"],[dctQue objectForKey:@"WrongAnswer2"],[dctQue objectForKey:@"WrongAnswer3"],[dctQue objectForKey:@"CorrectAnswer"],nil]; 

// blah blah 

    /* 
[strQuestionNo release]; 
[answers release]; 
[answerJumble release]; */ 

}

+0

Можете ли вы показать код для вашей «одной конкретной функции», где вы видели сбои? –

+0

может быть, потому что я использую AVAudioPlayer ?? Я использую следующий код для музыки. Для EG: NSString * soundFilePath = [[NSBundle mainBundle] pathForResource: @ "sound" ofType: @ "caf"]; NSURL * newURL = [[NSURL alloc] initFileURLWithPath: soundFilePath]; iKnow.player = [[AVAudioPlayer alloc] initWithContentsOfURL: newURL error: NULL]; –

+0

iKnow.player - это переменная из appDelegat, и я использую [игру iKnow.player] для воспроизведения звука при нажатии кнопок. Аналогичным образом у меня есть 2more переменная для разных звуков. –

ответ

0

Вы должны прочитать что-нибудь об управлении памятью в Cocoa. См. Mac Developer Center или tutorial at Cocoa Dev Central. Управление памятью на iPhone не сложно, жалко кодовое тестирование и ошибка.

+0

+1, этот код довольно беспорядок. –

+0

код - это беспорядок. ЛОЛ! Надеюсь, теперь это будет лучше! :). спасибо, помогите, начните с ума, чтобы обручить управление. –

0

ну после немного рытья, проблема заключалась в том, что звуковой файл пришлось переиграть. Если я нажму кнопку и до того, как звуковой файл закончит воспроизведение, если я снова нажму, звуковой файл воспроизводится только один раз. В результате к утечке памяти 3000.

Если бы я сделал это дважды приложение WUD аварии после утечки 6425. Отсюда error- «форматтеры данных в настоящее время не доступен». (Я думаю)

Смежные вопросы