Objective-C:将if / else语句与Plist值一起使用

时间:2011-05-24 16:06:06

标签: iphone objective-c xcode if-statement plist

我确信这是非常基本但我看不出我做错了什么。有人可以帮我理解我出错的地方吗?我在xcode工作。我正在尝试根据保存在属性列表中的值来显示视图的不同部分。如果分配给特定UITextField的值等于零,那么我想隐藏该UITextField。我想这样做。 gross是UITextField的名称:

NSArray *array = [[NSArray alloc] initWithContentsOfFile:filePath];
gross.text = [array objectAtIndex:7];

if ([array objectAtIndex:7 == 0]) {
    gross.hidden = YES;
}
else {
    gross.hidden = NO;
}

[array release];

我认为这个问题与我编写if / else语句的方式有关。我知道这是非常基本的,但我不太明白我哪里出错了。所以非常感谢您的帮助。

4 个答案:

答案 0 :(得分:3)

代码应为:

   NSArray *array = [[NSArray alloc] initWithContentsOfFile:filePath];
   gross.text = [array objectAtIndex:7];

   if ([[array objectAtIndex:7] isEqualToString:@"0"]) {
        gross.hidden = YES;
   } else {
        gross.hidden = NO;
   }
   [array release];

这假设您的数组索引7处的对象存在并且是一个字符串。如果它实际上是一个NSNumber,那么你应该使用条件

if ([[array objectAtIndex:7] intValue] == 0) {

请注意,上面的行适用于文本包含int的字符串,例如@"0"@"7"

答案 1 :(得分:2)

if ([[array objectAtIndex:7] intValue] == 0)

第一个错误是关闭]的位置。第二个是你可能在数组中有NSString,因为你已经在text属性中分配了它。因此,您需要使用intValue将其转换为int。

答案 2 :(得分:2)

如果您的数组包含nsstring,那么您的条件应如下所示:

if ([[array objectAtIndex:7] intValue] == 0) {
...

if ([[array objectAtIndex:7] isEqualToString:@"0"]) {

如果您的数组包含NSNumbers(在您将数组元素分配给text属性时不太可能),第一个条件也会起作用,但如果string不是有效数字则会失败 - 在这种情况下intValue也会返回0。

如果您确定您的元素是字符串并且您想要与@“0”完全比较,则第二个条件将正常工作。

<小时/> 您的情况相当于

if ([array objectAtIndex:0]) 

因为==运算符具有更高的优先级并且计算结果为0.将数组的元素直接比较也没有意义,因为NSArray无论如何也不能包含nil对象

答案 3 :(得分:1)

首先获取数组的长度可能更容易,并确保它有足够的元素,然后开始自己访问元素。