メソッドを使用してポインターを変更するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/4635731

質問

Objective Cを使用してiPhoneアプリに取り組んでいます。クラスAがあります。これにより、「リスト」と呼ばれるNSMutablearrayポインターが作成されます。しかし、クラスAでは、それを指すオブジェクトを作成することはありません。代わりに、クラスBのクラスメソッドを呼び出して、sqliteデータベースからデータを取得し、そこにnsmutablearrayオブジェクトを入力します。クラスAのポインターを設定して、メソッドの引数として渡すことにより、クラスBメソッドで作成されたNSMutablearrayオブジェクトを指すことができます。 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の引数が単なる定期的なポインターにならない理由を理解していません(ポインターとポインターとは対照的に) 。

役に立ちましたか?

解決

ポインターへのポインターは少し浮遊しています、はい。それを行う簡単な方法は、Aに空の配列を作成し、それを埋めるだけのBに通常の配列ポインターを渡すことです。 Bで配列の作成を主張した場合、これを行うことができると思います。

- (void) createArray: (NSMutableArray**) newArray
{
    NSAssert(newArray, @"I need a pointer, sweetheart.");
    *newArray = [[NSMutableArray alloc] init];
    [*newArray addObject:...];
}

他のヒント

このようなオブジェクトにポインターを変更することは、Objective-Cではかなりまれです。このようなものが見られる主な時間は、メソッドが障害の可能性がある場合です。 NSError 参照。例えば、 NSFileManager's - (BOOL)removeItemAtPath:(NSString *)path error:(NSError **)error.

これを行うためのはるかに一般的な方法は、メソッドに配列を返すことです。

NSMutableArray * list = [ClassB mutableArrayFromSQLite];
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top