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 に答える