1

在 Objective-C 中,我需要初始化一个 nulls/nil 数组(不确定使用哪一个)。

我有这个代码:

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

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

我收到一个错误,指出对象不能为零。

我计划使用这个数组将对象存储在某些索引中,而其他索引则为 nil(null?)

稍后在代码中:

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

3 回答 3

3

这就是NSNull目的。从文档中:

NSNull 类定义了一个单例对象,用于表示集合对象中的空值(不允许空值)。

[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?这样您就不必担心使用空值进行预填充。

或者,如果您真的想使用数组,我建议使用 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 回答