1

我正在使用 ASIFormDataRequest,它通过以下代码在某处给了我 EXC_BAD_ACCESS。我启用了 NSZombie,据我所知它与 ASIFormDataRequest 有关,它说负责的库是 GraphicsServices。

我有一个单独的类,它包含不同的方法来获取数据,我可以从我的 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;
}
4

2 回答 2

1

在行

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

您正在对您不拥有的对象调用 autorelease。您只需要释放您拥有的对象(即使用包含名称 new、alloc 或 copy 的方法创建的对象)。

将行更改为

ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:apiURL];

请求对象已经被自动释放。

于 2011-11-28T17:10:16.923 回答
1

我相信问题出在这一行:

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

由于您没有使用 alloc/init 分配和初始化请求对象,因此该对象已经自动释放。因此,您正在对已经自动释放的对象调用 autorelease。尝试这个:

ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:apiURL];
于 2011-11-28T17:10:32.187 回答