Objective c 有条件地从另一个数组填充数组-Objective

Objective c 有条件地从另一个数组填充数组-Objective,objective-c,nsmutablearray,nsarray,Objective C,Nsmutablearray,Nsarray,我想从非0或@“”的数组中复制项(取决于NSNumber或NSString)。但是,以下代码不起作用。我做错了什么 for (int i=0; i < [logbookItems count]; i++) { NSLog(@"%@, %@, %@", [[[logbookItems objectAtIndex:i] objectAtIndex:1] class], [[logbookItems objectAtIndex:i] objectAtIndex:0], [[logbook

我想从非0或@“”的数组中复制项(取决于NSNumber或NSString)。但是,以下代码不起作用。我做错了什么

for (int i=0; i < [logbookItems count]; i++) {
    NSLog(@"%@, %@, %@", [[[logbookItems objectAtIndex:i] objectAtIndex:1] class], [[logbookItems objectAtIndex:i] objectAtIndex:0], [[logbookItems objectAtIndex:i] objectAtIndex:1]);
    if ((([[[logbookItems objectAtIndex:i] objectAtIndex:1] isKindOfClass:[NSNumber class]]) && ([[logbookItems objectAtIndex: i] objectAtIndex: 1] > 0))
        || (([[[logbookItems objectAtIndex:i] objectAtIndex:1] isKindOfClass:[NSString class]]) && ([[logbookItems objectAtIndex: i] objectAtIndex: 1] != @""))) {
        [visibleLogbookItems addObject: [logbookItems objectAtIndex: i]];
    }
}

使用等式将NSString与
@“
进行比较实际上是指针比较。因此,您不能只使用
someString!=@“”
以与空字符串进行比较。相反,请使用
isEqualToString:
或针对零
长度进行测试

编辑:只是为了代码可读性,如果您使用的是Objective C2.0,您可以用foreach替换for循环和对象索引检索

for (NSArray *logbookItem in logBookItems) {
  NSLog(NSLog(@"%@, %@, %@", [[logBookItem objectAtIndex:1] class], ...

使用等式将NSString与
@“
进行比较实际上是指针比较。因此,您不能只使用
someString!=@“”
以与空字符串进行比较。相反,请使用
isEqualToString:
或针对零
长度进行测试

编辑:只是为了代码可读性,如果您使用的是Objective C2.0,您可以用foreach替换for循环和对象索引检索

for (NSArray *logbookItem in logBookItems) {
  NSLog(NSLog(@"%@, %@, %@", [[logBookItem objectAtIndex:1] class], ...
首先要改变这一点:

([[logbookItems objectAtIndex: i] objectAtIndex: 1] != @"")
致:

首先要改变这一点:

([[logbookItems objectAtIndex: i] objectAtIndex: 1] != @"")
致:


NSNumber也一样,你需要调用intValue,例如在其上与0进行比较。

NSNumber也一样,你需要调用intValue,例如在其上与0进行比较。

魔法,我忘记了这一点。但是,我仍然存在将0个数字复制到数组中的问题。我一定是做错了什么,但我找不到什么…实际上我会选择
([[[logbookItems objectAtIndex:I]objectAtIndex:1]length]!=0)
神奇,我已经忘记了。但是,我仍然存在将0个数字复制到数组中的问题。我一定是做错了什么,但我找不到什么…实际上我会选择
([[logbookItems objectAtIndex:I]objectAtIndex:1]length]!=0)
谢谢,不过如果它存储为整数/浮点,则存储为NSNumber,为什么在进行比较时我还需要获取整型/浮点值?它仍然是一个NSNumber,因此要检索存储的int/float,需要调用intValue/floatValue.Gotcha,谢谢。遗憾的是,你不能选择两个正确答案,因为这两个答案都适用于不同的部分。谢谢,虽然它存储为整数/浮点,但作为NSNumber,为什么我在进行比较时还需要获取整数/浮点值?它仍然是NSNumber,所以要检索存储的整数/浮点值,需要调用intValue/floatValue.Gotcha,谢谢很遗憾,你不能选择两个正确的答案,因为这两个答案都是针对不同的部分。