3

私はiOS初心者です。HTTP 実行の成功コールバックを指定したいと考えています。ただし、それは別のクラスです。どのように指定しますか?私は次のことを試しました -

[request setDidFinishSelector: @selector([[MyHttpCallbacks get] successHttpMethod]:)];

コールバック関数は MyHttpCallbacks で定義されています。これは動作しません。同じクラスでメソッドを定義し、このように使用すると、正常に動作します-

[request setDidFinishSelector: @selector(successHttpMethod:)];

どんな助けでも大歓迎です。

4

3 に答える 3

4
MyHttpCallbacks *callbacks = [[MyHttpCallbacks alloc] init];
request.delegate = callbacks;
于 2012-09-13T19:28:32.910 に答える
1

私は同じ問題を抱えていたのでServerComm、デリゲートメソッドを呼び出すためにHTTP処理クラス(私の場合)を作成しました。

最後に追加した ServerComm.h

@interface NSObject (ServerCommDelegate)
- (void)finishedLoading:(NSString*)result success:(BOOL)success;
@end

ServerComm.m

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    ...

    if ( [delegate respondsToSelector:@selector(finishedLoading:success:)] ) {
        [delegate finishedLoading:aStr success:YES];
    }    
}

インスタンス作成後のメインクラスで

serverCommObj.delegate = self;

そしてその方法

- (void)finishedLoading:(NSString*)result success:(BOOL)success 
{
    if (!success) {
        ...
    } else {
        ...
    }    
}
于 2012-09-13T19:29:54.330 に答える
0

あなたが達成したいことはネイティブには不可能だと思います(誰かがハックを持っていて、私が気づいていない限り)。私は何度もこの問題を抱えていました。設計を変更し、作成された場所と同じクラスにコールバックを含める必要がありました。

とはいえ、考えてみてください。(これは私が自分で試していないという提案です)コールバッククラスをメインに「インクルード」し、そこからコールバック内の関数を呼び出すセレクター関数を呼び出すことができます。あまり効率的なハックではありませんが、うまくいくと思います。

だから、このようなもの:

[request setDidFinishSelector: @selector(callbackFunction)];

同じクラスでコールバックする場合:

- (void)callbackFunction {
    [MyHttpCallbacks get] successHttpMethod];
}

successHttpMethod が別のクラスにあり、それをインポートとして含める場合。

于 2012-09-13T19:24:25.053 に答える