从数组中检索NSNumber

时间:2010-01-05 22:27:58

标签: iphone c arrays nsnumber

我对Objective C比较新,需要一些数组帮助。

我有一个包含Dictionary和NSNumber数组的plist,包含更多数组 稍后再加上。

NSMutableDictionary *mainArray = [[NSMutableDictionary alloc]initWithContentsOfFile:filePath];

NSArray *scoresArray = [mainArray objectForKey:@"scores"];

我需要从数组中检索所有值并将它们连接到10个UILabels 我在界面构建器中设置了。我已经完成了以下操作,将NSNumber转换为String。

NSNumber *numberOne = [scoresArray objectAtIndex:0];  
NSUInteger  intOne = [numberOne intValue];  
NSString *stringOne = [NSString stringWithFormat:@"%d",intOne];  
scoreLabel1.text = stringOne;

这似乎是一个非常漫长的方法,我必须重复上面的4行以检索所有数组值。我可以使用for循环迭代数组,并在输出处将所有值转换为字符串吗?

任何信息都将不胜感激。

2 个答案:

答案 0 :(得分:2)

// create NSMutableArray* of score UILabel items, called "scoreLabels"
NSMutableArray *scoreLabels = [NSMutableArray arrayWithCapacity:10];
[scoreLabels addObject:scoreLabel1];
[scoreLabels addObject:scoreLabel2];
// ...

NSUInteger _index = 0;
for (NSNumber *_number in scoresArray) {
    UILabel *_label = [scoreLabels objectAtIndex:_index];
    _label.text = [NSString stringWithFormat:@"%d", [_number intValue]];
    _index++;
}

修改

我不确定你为什么要评论_index++。我没有测试过这段代码,所以也许我在某处遗漏了一些东西。但是我没有看到_index++有任何问题 - 这是增加计数器的一种非常标准的方法。

作为创建scoreLabels数组的替代方法,您确实可以检索视图控制器的子视图的tag属性(在这种情况下,您添加了UILabel个实例{在Interface Builder中的值{1}}。

假设tag值是可预测的 - 例如,tagUILabel的每个scoreLabel1都标有等于scoreLabel10的{​​{1}}我们在tag循环(0到9)中使用的{1}} - 然后您可以直接引用_index

for

完成这项工作的关键是UILabel值必须是// no need to create the NSMutableArray* scoreLabels here NSUInteger _index = 0; for (NSNumber *_number in scoresArray) { UILabel *_label = (UILabel *)[self.view viewWithTag:_index]; _label.text = [NSString stringWithFormat:@"%d", [_number intValue]]; _index++; } 的唯一值,并且必须是tag引用的内容。

上面的代码非常简单地假设UILabel值与-viewWithTag:值相同,但这不是必需的。 (它还假设tag实例是视图控制器的_index属性的子视图,这取决于您在Interface Builder中设置界面的方式。)

有些人编写添加1000或其他整数的函数,允许您将子视图类型组合在一起 - UILabel个实例获得1000,1001等等,而view个实例将获得2000年,2001年等等。

答案 1 :(得分:0)

尝试使用stringValue ...

scoreLabel1.text = [(NSNumber *)[scoresArray objectAtIndex:0] stringValue];