'EXC_BAD_ACCESS' При попытке доступа к переменной? - PullRequest
0 голосов
/ 23 мая 2010

Я получаю ошибку ' EXC_BAD_ACCESS ' при попытке доступа к переменной в функции, отличной от той, которая была установлена ​​в

Переменная задается в функции ' awakeFromNib ':

//Retrieve Session-ID
sessionID = [self getSessionID];

И доступен в ' searchBtnClick ':

NSLog(@"Commening search (%@)",sessionID); // This causes the error

Сама переменная определяется в заголовке:

NSString *sessionID;

Может кто-нибудь подсказать, что с этим может быть не так?

Часть who из getSessionID, которая возвращает значение:

NSString *pC = @"";

// Separate Session ID
pC = [initCookie substringFromIndex:10];
pC = [pC substringToIndex:32];

NSLog(@"Got session ID :  %@",pC);

return pC;

Ответы [ 3 ]

8 голосов
/ 23 мая 2010

Ваш метод -getSessionID возвращает автоматически освобожденную переменную - когда вы снова попытаетесь получить доступ к указателю, строка уже была освобождена, и поэтому ссылка больше не действительна.Вам нужно вызвать -retain для переменной при первом ее получении, например:

 sessionID = [[self getSessionID] retain];

Затем, позже, в -dealloc вашего класса, вы должны сбалансировать удержание с выпуском:

 [sessionID release];
6 голосов
/ 23 мая 2010

Если getSessionID следует обычным соглашениям Какао, он возвращает автоматически выпущенный объект. Вам нужно сохранить его, иначе sessionID станет висящим указателем, как только пул авто-выпуска будет очищен (возможно, в конце цикла событий).

Если вы новичок в Objective C и Cocoa, обязательно прочитайте документацию Apple о модели памяти .

0 голосов
/ 25 мая 2011

У меня была похожая проблема, она вылетает, когда вы не выделяете память.Отпустив его так:

UIImage *lObj_image = [UIImage imageNamed: @"bluebar.png"];

.
.
.

[lObj_image release];

Проверьте свой viewdidload()

...