2011-11-28 4 views
1

Im, использующий ASIFormDataRequest и предоставляя мне EXC_BAD_ACCESS где-то со следующим кодом. Я включил NSZombie, и насколько я могу судить, это как-то связано с ASIFormDataRequest, и он говорит, что ответственной библиотекой является GraphicsServices.ASIFormDataRequest Exc_Bad_Access

У меня есть отдельный класс, который содержит различные методы для получения данных обратно и из моих UIViewControllers я могу назвать эти методы ...

- (Account *) signInAccount:(NSString *)duid user:(NSString *)userName password: (NSString *)passWord 
{ 
Account *myAccount = [[[Account alloc] init] autorelease]; 

NSURL *apiURL = [NSURL URLWithString:@"http://xxxxxxxxxxxxxxx.com/api.json"]; 
ASIFormDataRequest *request = [[ASIFormDataRequest requestWithURL:apiURL] autorelease]; 
[request addPostValue:@"duid025" forKey:@"duid"]; //todo - add the actual passed in value 
[request addPostValue:userName forKey:@"user[email]"]; 
[request addPostValue:passWord forKey:@"user[password]"]; 
[request setUsername:@"xxxxxxxx"]; 
[request setPassword:@"yyyyyyyy"]; 

[request startSynchronous]; 

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 = @""; 
    Credentials *myCredentials = [[Credentials alloc] init]; 
    myCredentials.emailAddress = userName; 
    myCredentials.passWord = passWord; 
    myAccount.credentials = myCredentials; 

    //assign division to default division 

} 
else if(statusCode==403) 
{ 
    NSString *error = [json valueForKeyPath:@"error"]; 
    myAccount.status = status; 
    myAccount.error = error; 
} 
else 
{ 
    // major issue, probably connection 
} 

return myAccount; 
} 

ответ

1

В строке

ASIFormDataRequest *request = [[ASIFormDataRequest requestWithURL:apiURL] autorelease]; 

вы звоните autorelease на объект, который у вас нет. Вам нужно только освободить принадлежащие вам объекты (т. Е. Те, которые создаются с использованием методов, содержащих имена new, alloc или copy).

Измените строку на

ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:apiURL]; 

Объект запроса будет уже автоматически.

+0

omg Я думал, что удалил все эти авторелеады. я изначально удалял их из всех других методов, кроме этого, я просто забыл об этом. в любом случае, я ценю быстрые ответы, надеюсь, это помогает кому-то. – Jesse

1

Я считаю, что проблема в этой строке:

ASIFormDataRequest *request = [[ASIFormDataRequest requestWithURL:apiURL] autorelease]; 

Поскольку вы не выделения и инициализации вашего объекта запроса с Alloc/инициализации, объект уже autoreleasing. Таким образом, вы вызываете autorelease на объект, который уже автореализуется. Попробуйте следующее:

ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:apiURL]; 
Смежные вопросы