【问题标题】:Objective-C: using if/else statement with Plist valuesObjective-C:使用带有 Plist 值的 if/else 语句
【发布时间】:2011-05-24 16:06:06
【问题描述】:

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

【问题讨论】:

  • 最后一行是错字吗?

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


【解决方案1】:

代码应为:

   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"

【讨论】:

  • 感谢您的回复和解释。我使用您的第二个 if 语句使我的代码正常工作。我对字符串/数组问题仍然有些困惑。我猜我的 plist——它是通过在程序中保存数据自动创建的——由一个字符串数组组成,其中的文本是整数。非常感谢您花时间回答。
【解决方案2】:
if ([[array objectAtIndex:7] intValue] == 0)

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

【讨论】:

    【解决方案3】:

    如果您的数组包含 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 对象

    【讨论】:

    • 感谢您的 cmets。它有助于澄清我遇到的问题
    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-01
      • 2017-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多