繁体   English   中英

Objective-C:使用带有 Plist 值的 if/else 语句

[英]Objective-C: using if/else statement with Plist values

我确定这真的很基本,但我看不出我做错了什么。 有人可以帮我理解我要去哪里错了吗? 我在 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 语句的方式有关。 我知道这真的很基本,但我不太明白我哪里出错了。 因此,非常感谢您的帮助。

代码应为:

   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 处的 object 存在并且是一个字符串。 如果它实际上是一个 NSNumber,那么你应该使用条件

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

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

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

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

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

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

或者

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

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

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


你的条件相当于

if ([array objectAtIndex:0])

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM