2011-11-28 72 views
1

即時通訊使用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]; 

您所呼叫的自動釋放在你不擁有的物體上。您只需要釋放您擁有的對象(即使用包含名稱new,alloc或copy的方法創建的對象)。

行更改爲

ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:apiURL]; 

請求對象就已經被自動釋放。

+0

omg我以爲我已經刪除了所有這些autoreleases。我最初除了這一個,除了其他所有的方法,我只是忽略了這一個。無論如何,我欣賞快速反應,希望這有助於某人。 – Jesse

1

我相信這個問題是在這一行:

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

既然你不分配與分配/初始化初始化您的請求對象,該對象已被自動釋放。因此,您正在對已經自動釋放的對象調用autorelease。試試這個:

ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:apiURL];