0

Objective C で引数を渡す際に問題があります。私の状況は次のとおりです。

ルートコントローラー(メイン画面)があります。ビュー内には ScrollView があり、3 つのビュー (次の 3 つのコントローラー) が含まれています。水平方向にスクロールでき、ScrollView 内のこれら 3 つのビューが変化します。次に、ハードウェアと通信するオブジェクトを 1 つ用意します。セッションとイン/アウト ストリームがあります。このオブジェクトはいくつかのデータを受け取り、このデータをビュー (ルート ビューとスクロール ビューの 3 つのビュー) に表示する必要があります。また、ルート コントローラとこれら 3 つのコントローラは、データを要求することがあります。

これは、データを直接送信するには、通信オブジェクトがすべてのコントローラーのインスタンスを持っている必要があることを意味します。ただし、コントローラーは、データを要求できるように通信オブジェクトのインスタンスを持っている必要があります。

私はそれを次のようにしたかった: ルートコントローラーは、そのサブビュー (スクロールビュー内) 用に 3 つのコントローラーを作成し、それらを表示します。また、通信オブジェクトを作成し、このオブジェクトにこれらの 3 つのコントローラーを送信します (参照による)。また、通信オブジェクトの各コントローラ インスタンスに送信します。この場合、通信オブジェクトはコントローラにデータを直接送信でき、コントローラはデータを直接要求することもできます。

通常、私はC#を使用しているため、refによる引数の受け渡しは問題ありませんが、Objective Cでは不可能のようです。参照を送信したいときは、コピーを作成して送信するので、オブジェクトのコピーが 2 つあり、必要ありません。1 つのオブジェクトへの参照が必要です。ポインターを送信しようとしました(UIViewController **)controllerが、うまくいかないようです。

これをどのように解決すればよいか教えていただけますか? 次のアイデアは、ルート コントローラーが 3 つのサブ コントローラーと 1 つの通信オブジェクトを作成することです。この通信オブジェクトはルート コントローラにメッセージを送信し、このメッセージを右のコントローラに転送します。サブコントローラはメッセージをルートコントローラに送信し、ルートコントローラはそれを通信オブジェクトに転送します。

4

2 に答える 2

0

オブジェクトを明示的にコピーしない場合は、Objective-C で参照によって渡されます。

void addWorld(NSMutableString *stringReference) {
    [stringReference appendString:@"world!"];
}

参照渡し:

NSMutableString *greeting = [NSMutableString stringWithString:@"Hello, "];
addWorld(greeting);
NSLog(@"%@", greeting);

回答「Objective C で参照によって値を渡す方法」も参照してください。

于 2013-08-27T11:45:15.837 に答える