私は目的Cを使ってiPhoneアプリを開発しています。私はクラス "list"と呼ばれるNSMutableArrayポインタを作成します。しかし、クラスAでは、私が指すオブジェクトを決して作成しません。代わりに、クラスBのクラスメソッドを呼び出して、sqliteデータベースからデータを取得し、そこにNSMutableArrayオブジェクトを設定します。私はメソッドに引数として渡すことによってクラスBメソッドで作成されたNSMutableArrayオブジェクトを指すようにクラスAのポインタを設定できるようにしたい。私はsqliteの結果を返すので、配列を返すことによってそれを行うことはできません。メソッドを使用してポインタを変更するにはどうすればよいですか?
私はこの権利をしているのだろうか?私はまだ完全な方法を書いていませんが(それはかなり長くなるでしょう)、私は残りの部分を始める前にポインタのものを正しく実行しているかどうかを知りたいのです。
//ClassA.m
//...
NSMutableArray *list;
[ClassB populateArrayFromSqlite:&list];
//Now do stuff with "list", which should point to the array created in populateArrayFromSqlite
//...
//ClassB.m
+(int)populateArrayFromSqlite:(NSMutableArray**)ar {
NSMutableArray *array = [[NSMutableArray alloc] init];
//Here there will be code that populates the array using sqlite (once I write it)
//And then I need to set the "list" pointer in ClassA.m to point to this array
ar = &array; //Is this how?
return resultFromSqlite;
}
正しいですか?あるいは私は何かを理解していないのですか?私はこのポインターツーポインターのものはまだ私とクリックしないと思います。ポインタについてのいくつかの一般的な情報源を読んだ後、私はこれをどうやってやっているのだろうと思っていますが、私の一部はなぜar引数が普通のポインタ(pointer-to-pointer) 。
+1それはちょうどので、 '(!NEWARRAY = nilの)場合'をチェックするのが最善だろうけれどもあなたは間違ってヌルポインタを間接参照しません。 :) –
右。私は、ポインターツーポインターの質問に答えるためにこの可能性について言及しましたが、実際には私が最初に言及したより単純なソリューションを使用していました。物事を明確にするための主張を追加します。 – zoul
ありがとう、私はクラスAのオブジェクトを最初に作成し、そのクラスへのポインタをクラスBのメソッドに渡すことさえ考えませんでした。また、あなたの例で私はこれを理解していると思います。 newArray引数にポインタのアドレスを渡すと、ポインタへのポインタのコピーが実際に送信され、逆参照するとポインタ自体が得られます。次に、新しいアドレスを割り当てることができます。 – Adam