Сбой 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]?