2010-10-14 3 views
0

Я должен получить утечку памяти, я вызываю представление библиотеки графов, и представление показывает, как впервые я использую этот метод кнопки, но во второй раз, когда приложение выходит из строя, без реального сообщения об ошибке, которое я вижу.iPhone, Почему я получаю утечку памяти и как ее исправить?

-(IBAction)graphNavButtonPressed 
{ 
    UIViewController *vc = [[GraphController alloc] init]; 

    [vc setModalTransitionStyle:UIModalTransitionStyleCrossDissolve]; 
    [self presentModalViewController:vc animated:YES]; // APP FAILS ON THIS LINE 
    [vc release]; 
    return; 
} 

Program received signal: “EXC_BAD_ACCESS”. 
(gdb) bt 
#0 0x02889903 in objc_msgSend() 
#1 0x0279a1c0 in __useVolatileDomainsForUser() 
#2 0x0267120c in CFPreferencesCopyAppValue() 

EDIT:

В GraphController ViewDidLoad У меня этот код.

NSUserDefaults *myDefaults = [NSUserDefaults standardUserDefaults]; 
strCurrencySymbol = [myDefaults objectForKey:kNSUCurrency]; //HERE where it crashes 

EDIT 2:

Ив читал о кого-то с подобной проблемой, вызванной вид загружается неправильно. link text Я делаю что-то, возможно, немного странное. Чтобы использовать библиотеку графов из панели вкладок, я загружаю представление диапазона дат и затем показываю график в viewDidLoad, а затем, когда график закрыт, вид диапазона дат остается. Затем пользователь может щелкнуть график просмотра, чтобы отобразить график с разными датами. Если я этого не сделаю, мое представление будет пустым, когда график будет закрыт. Так вот, как я называю график.

alt text

I`m повторное использование экрана диапазона дат в других местах, так что график может быть не показано.

Любые дополнительные предложения?

+0

Вы объявили метод init в GraphController? – willcodejavaforfood

+0

Что такое kNSUCurrency и как оно определено? – tidwall

+0

У меня есть файл констант.h в #define kNSUCurrency @ "currency" – Jules

ответ

0

Я думаю, вы не должны выпускать объект vc в том же IBAction, потому что вы, вероятно, используете его после arent you? не уверен

+0

Thats weird, я попробовал autorelease, и он работал немного дольше, потом разбился, я вынул релиз, и теперь он отлично работает. Я не понимаю, почему это происходит, хотя нам всегда приходилось выпускать, если мы использовали alloc и т. Д. – Jules

+0

Потому что, если вы выделяете память для объекта, и вы отпускаете его, пока вы используете его, это нормально для получения сбоя, у вас есть чтобы освободить объект, когда вы закончили работать с ним. – JonLOo

+0

Вероятно, вы пытаетесь получить доступ к объекту после этого IBAction, так что вы получаете крах, возможно, вам следует объявить ваш контроллер UIView вне метода IBAction, поместить его в метод и выпустить его, когда вы закончите с ним. – JonLOo

0

Код, который вы опубликовали, является правильным с точки зрения управления памятью. Если у вас возникли проблемы с представлением VC (или его выпуском), проверьте управление памятью в init, viewDidLoad и dealloc GraphController. Вероятнее всего, проблема там где-то.

Кроме того, эта трассировка стека выглядит так, как что-то в графической библиотеке пытается заразить пользовательские предпочтения и неудачи, поэтому я проверил GraphController для звонков на CFPreferencesCopyAppValue и удостоверился, что он вызван правильно.

+0

См. Вышеизложенное, не знаете, почему это должно быть причиной аварии? – Jules

+0

Нечетный, редактирование делает его похожим на стандартноеUserDefaults возвращает выпущенную память. Попробуйте пройти через отладчик, чтобы посмотреть, что именно происходит. – kevboh

+0

Его определенно эта линия. – Jules

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