Objective-C:获取数组中对象的索引

时间:2012-02-13 23:12:22

标签: objective-c arrays logging indexing

我是Obj C编程的新手,所以我将从头开始 我有一个带有一些NSNumber和NSString元素的数组,我想将NSString elems替换为NSNumber elems。我决定在构造中使用for new NSMutableArray所有元素值和NSMutableIndexSet它们的索引,但是当我这样做时我面临麻烦,在这里它是,我告诉你我的代码和日志。

NSArray *oneMoreStack = [program copy];
NSLog(@" stack=%@",oneMoreStack);
NSLog(@" show me index ind=%@",[oneMoreStack indexOfObject:@"x"]);
NSMutableIndexSet *myVarIndexesSet;
NSMutableArray *myVarsArray;


for (id myVarConst in oneMoreStack) {
    if([myVarConst isKindOfClass:[NSString class]])
    {
        if([myVarConst isEqualToString:@"x"]){
            [myVarsArray addObject:myVarConst];
            NSLog(@"obj x=%@",myVarConst);
            [myVarIndexesSet addIndex:[oneMoreStack indexOfObject:myVarConst]];
            NSLog(@"ind x=%@",[oneMoreStack indexOfObject:myVarConst]);

        } 
}

当我运行它时,log告诉我:

Calculator[6306:f803]  stack=(
    x,
    2,
    "+"
)
Calculator[6306:f803]  show me index ind=(null)
Calculator[6306:f803] obj x=x
Calculator[6306:f803] ind x=(null)
then crash [NSMutableArray replaceObjectsAtIndexes:withObjects:]: index set cannot be nil

所以,我的问题是为什么 [oneMoreStack indexOfObject:myVarConst] 会返回 null ?我该如何解决?谢谢。 我之前没有提到过这段代码,因为认为问题在于获取索引。

在上一部分代码出现之后:

[stack replaceObjectsAtIndexes:[myVarIndexesSet copy] withObjects:[myVarsArray copy]]; 

之后我提到的错误报告崩溃了。谢谢。

1 个答案:

答案 0 :(得分:4)

[oneMoreStack indexOfObject:myVarConst]返回一个NSUInteger,一个基本类型,而不是一个对象。

在你的NSLog中,你正在使用%@,它说“嘿,把这个对象我作为一个参数传递,在它上面调用-description,并打印出来”。幸运的是,你传入的NSUInteger碰巧是0,NSLog认为它是一个空对象,你没有崩溃。如果对-indexOfObject:的调用返回非0,则可能会崩溃。

请改为尝试:

// For iOS
NSLog(@" show me index ind=%u", [oneMoreStack indexOfObject:@"x"]);

// For 64-bit and 32-bit Mac OS X
NSLog(@" show me index ind=%lu", (unsigned long)[oneMoreStack indexOfObject:@"x"]);

您可以在以下位置详细了解字符串格式: Formatting String Objects