我正在尝试检测数组是否为空,以便能够进行某个调用。
我尝试使用if (![array ==nil])
,但不能编译。
我相信对此有一个非常简单的解释。
如果数组为空,我想这样做:
array = [[NSMutableArray alloc]init];
如果它有一个对象,我想这样做:
array = [[userDefaults arrayForKey:@"MyFavorites"] mutableCopy];
答案 0 :(得分:6)
如果您声明了它,但根本没有指定任何内容:
NSMutableArray *array;
然后数组将是nil
,这意味着它根本不存在,所以你不能说它是否为空,所以你不能检查任何东西。
如果您 分配了某些内容,并且您想要查明现有数组是否为空,那将取决于您首先创建它的方式。
如果数组是通过某种方便方法分配的,那么它是自动释放的,所以只需这样做:
if ([array count] == 0) {
array = [[NSMutableArray alloc] init];
} else {
array = [[userDefaults arrayForKey:@"MyFavorites"] mutableCopy];
}
如果数组是从init或copy方法分配的,或者之前已保留过,请将计数存储在临时变量中,释放数组并使用临时变量来决定要执行的操作:
NSInteger count = [array count];
[array release];
if (count == 0) {
array = [[NSMutableArray alloc] init];
} else {
array = [[userDefaults arrayForKey:@"MyFavorites"] mutableCopy];
}
答案 1 :(得分:1)
在你的情况下,我总是使用没有差异
array = [[userDefaults arrayForKey:@"MyFavorites"] mutableCopy];
并在程序启动时立即将用户默认值中的默认值设置为空数组,然后再访问默认值(来自Apple的示例):
+ (void)initialize{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSDictionary *appDefaults = [NSDictionary
dictionaryWithObject:[NSArray array] forKey:@"MyFavorites"];
[defaults registerDefaults:appDefaults];
}
请参阅Apple's doc。
答案 2 :(得分:0)
假设您正在谈论NSArray,如果myArray
未正确分配+初始化(您要检查的内容),则其引用将为nil
,因此您可以这样做:
if(myArray) //or even if(myArray != nil) since myArray will be a pointer
{
//properly inizialized
}
else
{
//not properly inited
}
另一方面,如果它已经被引入,你可以通过检查count
属性来测试它的空白,该属性返回它包含的元素数量
if([myArray > 0])
//there is at least one element
}
else
{
//no elements
}
答案 3 :(得分:0)
你可以使用NSArray的count函数。它也适用于NSMutableArray ......
syntext将是,
int ct = [array count];
ct将包含数组中的项目数。
如果我们空了,它将是零