3

エンティティを管理対象オブジェクトコンテキストに保存するための次のコードがあります。

    NSError *savingError = nil;

    if ([self.managedObjectContext save:&savingError]) {
        NSLog(@"Successfully saved the context.");
    } else {
        NSLog(@"Failed to save the context. Error = %@", savingError);
    }

私のドキュメントによると、私は次のことを理解しています。コンテキストに新しいエンティティを挿入した後、コンテキストを保存する必要があります。これにより、コンテキストの保存されていないすべてのデータが永続ストアにフラッシュされます。save:これは、管理対象オブジェクトコンテキストのインスタンスメソッドを使用して実行できます。BOOLこのメソッドの戻り値がである場合、YESoutコンテキストが確実に保存されます。

私がはっきりしていないのは、後の構文save:、具体的にはローカルの直前のアンパサンド'&'savingError variableです。これはコンパイラに何を伝えますか?

4

3 に答える 3

2

&演算子は基本的に「のアドレス」を意味します。値を受け取り、その値へのポインターを返します。したがって、この場合、変数のアドレスを保持するポインターである&savingError型の値です。呼び出し元のコードは、そのポインターを「逆参照」して変数を取得するために使用できます。これは、それが言うことができることを意味しますNSError**savingError*error

*error = [NSError errorWithDomain:...]

コードでは、savingError変数に新しいエラーが入力されます。

これは、C で複数の戻り値を持つことをシミュレートするためのかなり一般的なプログラミング スタイルです。このようなパラメーター (変数のアドレスを渡し、関数がそれを埋める値へのポインター) は、通常、「out-parameters」または「out-params」と呼ばれます。

于 2012-12-11T20:17:22.657 に答える
1

& はオブジェクトのアドレスを表します。オブジェクトをメソッドに渡すと、オブジェクトのコピーが渡されます。そのメソッド内でそのオブジェクトに加えられた変更は、メソッド呼び出しで使用されるオブジェクトには影響しません。

& を使用する場合、実際にはオブジェクトのアドレスを渡すため、そのメソッドでオブジェクトに加えた変更は、メソッド呼び出しで引数として使用されるオブジェクトに影響します。

ここのsave:メソッドでは、NSError クラスのオブジェクトを渡しています。Save メソッド(プロセス)の実行中に何らかのエラーが発生した場合は、この NSError オブジェクトを使用して見つけることができます。

[savingError localizedDescription];
于 2015-04-25T09:37:24.317 に答える
1

以下をご覧ください: `&` (アンパサンド) が一部のメソッド パラメータの前に置かれるのはなぜですか?

要するに: NSError ポインターにポインターを渡す必要があるためsave:、時折発生するエラーを に割り当てることができますsavingError

于 2012-12-11T20:18:45.033 に答える