2

ASIHTTPRequest を使用して webservice (soap) を呼び出します。

-(void)callWebService:(NSString*)URL:(NSString*)SOAP{

    NSURL *url = [NSURL URLWithString:URL];
    NSString *SOAPMessage = [NSString stringWithFormat:SOAP];
    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];

    request.shouldAttemptPersistentConnection = NO;
    [request setValidatesSecureCertificate:NO];
    [request setRequestMethod:@"POST"];

    [request appendPostData:[SOAPMessage dataUsingEncoding:NSUTF8StringEncoding]];
    [request setDidFinishSelector:@selector(requestCompleted:)];
    [request setDidFailSelector:@selector(requestFailed:)];

    [request setDelegate:self];
    [request startAsynchronous];

}

-(void)requestCompleted:(ASIHTTPRequest * )r{

    NSString *responseString = [r responseString];
    NSLog(@"%@",responseString);

}

-(void)requestFailed:(ASIHTTPRequest * )r{

    NSError *Err = [r error];
    NSLog(@"%@",Err);

}

これをappDelegate.mで呼び出すと、正常に動作し、requestCompletedハンドラーが応答をスローします...しかし、自分のクラスでこの同じコードを使用すると、BAD ACCESSエラーがスローされ、委任できないことがわかりました:self to handle応答。setDelegate を appdelgate ポインター (ID 送信者として渡される) に設定すると、機能します (そこにハンドラーがあります)。では、なぜ自分のクラスが独自のイベントを処理できないのでしょうか? 私はobjective-cが初めてなので、ここで大きな何かが欠けていると思います。ありがとう

4

3 に答える 3

3

「独自のクラス」に requestCompleted と requestFailed が必要です。また、そのクラスは存続する必要があります。つまり、サービスが呼び出されている間は解放できません。「独自のクラス」のインスタンスを強力な/保持されたプロパティなどに保存する必要があります。

于 2012-10-31T21:16:17.310 に答える
0

通話self中に解放されているかどうかを確認します。delegate適切に保持されていることを確認してください。

于 2012-10-31T23:05:17.273 に答える
0

このコードを dealloc または viewWillDisappear に追加します

[request setDelegate:nil];
于 2012-10-31T21:07:43.213 に答える