1

私はiPhoneアプリケーションの開発は初めてですが、これまでのところ何とか管理しているようです(学習しながら)..しかし、理解できない問題に遭遇しました。シナリオは次のとおりです。

ネットワーク機能を内部に持つ CoreAPI という拡張クラスがあります。サーバーにリクエストを送信し、0 または 1 の応答を取得して true または false を返す CoreAPI 内に「Login」という関数があります。これは同期リクエストで完全に機能していましたが、今はすべてを非同期にする必要があります。

だから、以下は私がやろうとしていることです..これは、「タイプIDのオブジェクトにはメソッドloginCallbackがありません」という行に沿ったエラーで機能しません

loginViewController.m

- (void) login {
    CoreAPI APIObject = [[CoreAPI alloc] init];
    [APIObject login:self];
}

- (void) loginCallback {
    NSLog(@"It called back.");
}

CoreAPI.m

- (void)login:(id)sender {
    [sender loginCallback];
}

ありがとうございます。必要な情報が不足している場合はお知らせください。

4

2 に答える 2

0

これでうまくいくはずです:

まず、CoreApi.m 内に loginViewController ヘッダーをインポートします。

#import "loginViewController.h"

次に、ログイン方法を次のように変更します。

- (void)login:(id)sender {
    [(loginViewController*)sender loginCallback];
}

またはこれ:

- (void)login:(loginViewController*)sender {
        [sender loginCallback];
}

説明: ログイン メソッドが、タイプ の 1 つのオブジェクトをパラメータで受け取っていることに注意してくださいid。Objective C では、idtype は不明なクラスの Objective-C への参照を意味します。そのため、ログイン メソッド内では、コンパイラは送信者が loginViewController クラスのインスタンスであることを認識しないため、loginViewController のメソッドを認識しません。

これに関する情報については、以下をお読みください: Objective-C: id と void の違い *

実際のエラーを削除することにのみ焦点を当てていることに注意してください。コードを非同期で実行するには、さらに多くのことを行う必要があります。

より良いコールバックを実行するには、デリゲートまたはブロックを探してください (オルトマンの回答のように)。

バックグラウンドで実行するには、CDG を探します: http://developer.apple.com/library/ios/#DOCUMENTATION/General/Conceptual/ConcurrencyProgrammingGuide/OperationQueues/OperationQueues.html

于 2013-08-05T01:41:38.133 に答える