Сбой iOS ASIFormDataRequest

У меня есть метод регистрации, который использует API для регистрации пользователя и возврата информации об учетной записи. Все работает хорошо, но в моем контроллере представления регистрации, когда регистрация успешна, я выскакиваю представление регистрации. Как только я открываю представление регистрации, я получаю EXC_BAD_ACCESS в строке ниже. ПРИМЕЧАНИЕ - это происходит только на телефоне. В симуляторе этого не происходит. Кажется, это проблема времени, но я не могу понять. Например, если я поставлю точку останова на [_completionHandlerSignUp release]; тогда это работает каждый раз.

Вот мой метод createAccount в моем классе DataAccessor:

_completionHandlerSignUp = [handler copy];

the normal request code would be here

[request setCompletionBlock:^
 {
     int statusCode = request.responseStatusCode;

     NSDictionary *json = [request.responseString JSONValue];
     NSString *status = [json valueForKeyPath:@"status"];
     NSLog(@"API JSON %@", request.responseString);

     myAccount.statusCode = statusCode;

     if(statusCode == 200)
     {
         myAccount.status = status;
         myAccount.error = @"";
         myAccount.firstName = firstName;
         myAccount.lastName = lastName;
         Credentials *myCredentials = [[Credentials alloc] init];
         myCredentials.emailAddress = userName;
         myCredentials.passWord = passWord;
         myAccount.credentials = myCredentials;

         [myCredentials release];
     }
     else if(statusCode == 403)
     {
         NSString *error = [json valueForKeyPath:@"error"];
         myAccount.status = status;
         myAccount.error = error;
         NSLog(@"API Error %@",error);
     }

     NSLog(@"TEST - Sending Account Response ");
     _completionHandlerSignUp(myAccount);

     NSLog(@"TEST - DEALLOCATING OBJECTS ");

    [_completionHandlerSignUp release];  <--**EXC_BAD_ACCESS HAPPENS HERE**
    _completionHandlerSignUp = nil;

     }];

А вот метод viewcontroller:

DataAccessor *dataAccessor = [[DataAccessor alloc] init];

        [dataAccessor createAccount:[Utilities getDeviceUDID] user:txtEmail.text password:txtPassword.text firstname:txtFirstName.text lastname:txtLastName.text  completion:^(Account *myAccount)
        {
            [dataAccessor release]; 

            if(myAccount != NULL)
            {
                NSLog(@"Status: %@", myAccount.status);
                NSLog(@"Error: %@", myAccount.error);

                if(myAccount.statusCode == 200)  //handle successful transaction
                {

                    [Preferences signInUser:myAccount.credentials.emailAddress password:myAccount.credentials.passWord];

                    [self popViewController];  **<<<<If I remove this, THERE IS NO CRASH******
                }
                else if(myAccount.statusCode == 403)
                {
                    //todo - handle error
                }
            }


            [self finalUpdate];
        }];

- (void) popViewController
{
    NSLog(@"TEST - Popping View Controller ");

    CATransition* transition = [CATransition animation];
    transition.duration = 0.5;
    transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    transition.type = kCATransitionPush; //kCATransitionMoveIn; //, kCATransitionPush, kCATransitionReveal, kCATransitionFade
    transition.subtype = kCATransitionFromBottom; //kCATransitionFromLeft, kCATransitionFromRight, kCATransitionFromTop, kCATransitionFromBottom
    //  MainSelectionMenu *myViewController = [[MainSelectionMenu alloc] initWithNibName:@"MainSelectionMenu" bundle:nil];
    [self.navigationController.view.layer addAnimation:transition forKey:nil];
    [[self navigationController] popViewControllerAnimated:NO];
}

Еще одна странность заключается в том, что моя функция входа в систему работает почти так же. Вход вызывает API SignIN в DataAccessor, и когда он возвращается в контроллере представления, он открывает представление. Тем не менее, функция входа в систему работает нормально, и никогда не падает.

РЕДАКТИРОВАТЬ - Zombies Log:

- Адрес Категория Тип события RefCt Отметка Размер Ответственный библиотека Ответственный Caller
0   0x11035a00  ASIFormDataRequest  Malloc  1   00:16.125.952   1024    Saveology   +[ASIFormDataRequest requestWithURL:]
1   0x11035a00  ASIFormDataRequest  Autorelease   00:16.126.025   0   Saveology   +[ASIFormDataRequest requestWithURL:]
2   0x11035a00  ASIFormDataRequest  Autorelease   00:16.126.026   0   Saveology   -[SaveologyDealsDataAccessor createDealsAccount: пользователь: пароль: Имя: Фамилия: divisionid: завершение:]
3   0x11035a00  ASIFormDataRequest Сохранил 2   00:16.126.179   0 Фонд NSRecordAllocationEvent
4   0x11035a00  ASIFormDataRequest Сохранил 3   00:16.126.196   0 Фонд NSRecordAllocationEvent
5   0x11035a00  ASIFormDataRequest Выпуск 2 00: 16.126.266 0 Фонд NSRecordAllocationEvent
6   0x11035a00  ASIFormDataRequest Выпуск 1   00:16.126.267   0 Фонд NSRecordAllocationEvent
7   0x11035a00  ASIFormDataRequest Сохранил 2   00:16.127.268   0 Фонд NSRecordAllocationEvent
8   0x11035a00  ASIFormDataRequest Сохранил 3   00:16.127.302   0 Фонд NSRecordAllocationEvent
9   0x11035a00  ASIFormDataRequest Выпуск 2   00:16.127.332   0 Фонд NSRecordAllocationEvent
10  0x11035a00  ASIFormDataRequest Сохранил 3   00:16.128.711   0 Фонд NSRecordAllocationEvent
11  0x11035a00  ASIFormDataRequest Выпуск 2   00:16.128.771   0 Фонд NSRecordAllocationEvent
12  0x11035a00  ASIFormDataRequest Сохранил 3   00:16.129.880   0 Базовое событие NSRecordAllocationEvent
13  0x11035a00  ASIFormDataRequest  Retain  4   00:16.129.889   0 Базовое событие NSRecordAllocationEvent
14  0x11035a00  ASIFormDataRequest Выпуск 3   00:16.129.893   0 Базовое NSRecordAlestationEvent 15 001 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 всегда 0ца 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0ase 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 заболай 0новата 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 0 5 5 5 5 (R зы ((R / RG) / 0/0/023 023 081 0 0 0 0 0 0 0 0 0 0 0 0 0 0 46 0 0 0 0 0RR 0 0R0RD-EX-EN-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 щелчков на базе данных 0 16.309.250   0 Основное NSRecordAllocationEvent
17  0x11035a00  ASIFormDataRequest  Retain  4   00:16.310.289   0 Основное NSRecordAllocationEvent
18  0x11035a00  ASIFormDataRequest Выпуск 3   00:16.310.396   0 Основное NSRecordAllocationEvent000 0351 0101 т Release 2   00:16.310.640   0 Фонд NSRecordAllocationEvent
20  0x11035a00  ASIFormDataRequest Сохранил 3   00:16.310.775   0 Фонд NSRecordAllocationEvent
21  0x11035a00  ASIFormDataRequest Сохранил 4   00:16.310.776   0 Фонд NSRecordAllocationEvent
22  0x11035a00  ASIFormDataRequest Выпуск 3   00:16.310.789   0   Foundation  NSRecordAllocationEvent
23  0x11035a00  ASIFormDataRequest Выпуск 2   00:16.310.807   0 Фонд NSRecordAllocationEvent
24  0x11035a00  ASIFormDataRequest Сохранил 3   00:16.311.443   0 Фонд NSRecordAllocationEvent
25  0x11035a00  ASIFormDataRequest Сохранил 4   00:16.311.469   0 Фонд NSRecordAllocationEvent
26  0x11035a00  ASIFormDataRequest Сохранил 5   00:16.311.491   0 Базовое событие NSRecordAllocationEvent
27  0x11035a00  ASIFormDataRequest  Retain  6   00:16.311.496   0 Базовое событие NSRecordAllocationEvent
28  0x11035a00  ASIFormDataRequest Выпуск 5 00: 16.311.501 0 Базовое событие NSRecordAllocationEvent
29  0x11035aRe 0 0 0 0 0 5 5 5 5 5 5 5 5 5 6 6 6 6 0 6 6 0 6 6 6 0 6 6 6 6 6 6 6 6 6 6 6 0 6 6 6 6 0 6 6 6 6 6 6 0 6 6 6 6 6 6 6 6 0 6 6 6 6 6 6 УЕШЕЙСЯ, ПЕРЕДАЧА СОЕДИНЕНИЙ ASIF 0x11035a00 ASIFormDataRequest Выпуск 3   00:16.311.557   0   Foundation  NSRecordAllocationEvent
31  0x11035a00  ASIFormDataRequest Выпуск 2   00:16.311.563   0   Foundation  NSRecordAllocationEvent
32  0x11035a00  ASIFormDataReestest Выпуск 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0: 0 для 333: 16.3 для Windows 0: 0.3.3: 0: 0.3: 0: 13.3: 0: 13.3: N: 0.3.3: 0: 0.3. NSRecordAllocationEvent
34  0x11035a00  ASIFormDataRequest  Zombie  -1  00:16.320.964   0   GraphicsServices    GSEventRunModal

1 ответ

Решение

Включите Zombie Objects, чтобы получить более подробную информацию об этой ошибке EXE_BAD_ACCESS. Должен рассказать вам кое-что об объекте, который он ожидает там. Обычно это означает, что вы освободили указатель объекта слишком рано при выполнении кода.

Включение зомби: как мне настроить NSZombieEnabled в Xcode 4?

Что происходит, когда вы удаляете эту строку [_completionHandlerSignUp release]?

Другие вопросы по тегам