1

Objective-C では、null/nil の配列を初期化する必要があります (どれを使用すればよいかわかりません)。

私はこのコードを持っています:

    NSMutableArray * ObjectIndex = [[NSMutableArray alloc] initWithCapacity:maxObjectId];

    for ( int i = 0; i < maxObjectId; i++ )
    {
         [ObjectIndex setObject:nil atIndexedSubscript:i];
    }

オブジェクトを nil にすることはできないというエラーが表示されます。

この配列を使用して特定のインデックスにオブジェクトを格納し、他は nil(null?) のままにする予定です。

コードの後半:

for (Object * obj in objs)
{
    ObjectIndex[obj.ID] = obj;
}
4

3 に答える 3

3

それがNSNull目的です。ドキュメントから:

NSNull クラスは、コレクション オブジェクト (nil 値を許可しない) で null 値を表すために使用されるシングルトン オブジェクトを定義します。

[NSNull null]したがって、代わりに配列を埋めることができますnil

for (int i = 0; i < maxObjectId; i++ )
{
     ObjectIndex[i] = [NSNull null];
}

はシングルトン オブジェクトであるため[NSNull null]、次のコマンドで配列エントリを確認できます。

if ([ObjectIndex[i] isEqual:[NSNull null]]) {
    // "empty"
}

注:通常、Objective-C インスタンス変数の名前は小文字で始まるためobjectIndex、より適切な名前になります。

于 2012-12-12T06:52:31.167 に答える
1

スパース配列を使用するのではなく、数値をキーとして NSMutableDictionary を使用してみませんか? そうすれば、With null の事前設定について心配する必要はありません。

または、本当に配列を使用したい場合は、addObject: または insertObject:atIndex: のいずれかで初期化することをお勧めします。

于 2012-12-12T06:56:26.493 に答える
0

単純!あなたはこのようにそれを行うことができます

NSMutableArray * ObjectIndex = [[NSMutableArray alloc] initWithCapacity: maxObjectId];
for(int i=0 ; i< maxObjectId ; i++) {
    [ObjectIndex addObject:[NSNull null]];
}
于 2012-12-12T07:02:57.907 に答える