UIAlertView clickedButtonAtIndex EXC_BAD_ACCESS - PullRequest
0 голосов
/ 21 апреля 2011

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

Я могу нормально вызывать метод и вызывать NSLog (), но как только я использую переменные объекта, я получаю ошибку EXC_BAD_ACCESS.

Моей первой мыслью было, что это может быть проблема с многопоточностью, поэтому мысль о том, что вызов NSNotificationCenter может решить ее, но это также заканчивается той же ошибкой.

Ниже приведен код, который я получил на данный момент. Я пробовал несколько разных вещей (некоторые закомментированы) безрезультатно. Объект dbURL является свойством класса. ( Редактировать : приведенный ниже код не является полным)

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{

//If database update
[[NSNotificationCenter defaultCenter] postNotificationName:@"newdb" object:self]; //EXC_BAD_ACCESS happens here

if ([alertView.title isEqualToString: @"Database Update"]){
    switch (buttonIndex) {
        case 0:
            //[self getNewDatabase];
            //[self performSelectorOnMainThread:@selector(getNewDatabase) withObject:nil waitUntilDone:NO];
            //[NSThread detachNewThreadSelector:@selector(getNewDatabase) toTarget:self withObject:nil];
            [[NSNotificationCenter defaultCenter] postNotificationName:@"newdb" object:self];
            break;




// Get a new database file from the server
- (void)getNewDatabase{


    NSLog(@"in database: %@", dbURL);
}

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 21 апреля 2011

Проблема была в том, что объект, который я вызывал, не был сохранен должным образом, и поэтому ссылка была потеряна, что привело к ошибке EXC_BAD_ACCESS

Спасибо Нику Уиверу. Использование аргумента NSZombieEnabled в параметрах сборки помогло определить мошенническую ссылку.

0 голосов
/ 21 апреля 2011

Нельзя сравнить NSString с ==. Вам нужно использовать isEqualToString :

[alertView.title isEqualToString:@"Database Update"]
...