1

我正在尝试对数组元素执行操作,但我真的不明白为什么我的代码不起作用:

这是我的.h:

@interface ViewController : UIViewController
{
    NSArray *tableauScore;
    UILabel * modificationScore;
}

@property (weak, nonatomic) IBOutlet UILabel *nom1;
@property (weak, nonatomic) IBOutlet UILabel *nom2;
@property (weak, nonatomic) IBOutlet UILabel *nom3;
@property (weak, nonatomic) IBOutlet UILabel *nom4;
@property (weak, nonatomic) IBOutlet UILabel *bsc1;
@property (weak, nonatomic) IBOutlet UILabel *bsc2;
@property (weak, nonatomic) IBOutlet UILabel *bsc3;
@property (weak, nonatomic) IBOutlet UILabel *bsc4;

@end

我的.m:

tableauScore = [NSArray arrayWithObjects:nom4, nom3, nom2, nom1, bsc1, bsc2, bsc3, bsc4, nil];
for(int i = 0; i < 8; i++)
            {
                modificationScore = [tableauScore objectAtIndex:i];
                modificationScore.hidden = NO;
                modificationScore.center = CGPointMake(modificationScore.center.x, modificationScore.center.y -40);
            }

问题是我在“modificationScore = [tableauScore objectAtIndex:i];”处有一个线程点 线,我不知道为什么。我看到了很多主题,但没有人可以帮助我。你们中有人有想法吗?

谢谢你!

4

4 回答 4

1

我假设“线程点”是指崩溃?如果是这样,您添加到数组的属性之一可能是nil.

[tableauScore count]在遍历它们之前检查数组 ( ) 中的元素数量;不要假设有八个。或者,更好的是,使用语法循环遍历所有元素:

for (a in tableauScore) {
于 2013-01-07T11:13:19.300 回答
0

modificationScore如果您真的不需要它,我不会全局定义。

我会做:

for(UILabel *tempLabel in tableauScore)
    {
        tempLabel.hidden = NO;
        tempLabel.center = CGPointMake(modificationScore.center.x, modificationScore.center.y -40);
    }

我不知道你想通过 chaning 实现什么center,需要改变

于 2013-01-07T11:09:35.127 回答
0

[NSArray arrayWithObjects:]只会创建一个直到第一个nil给定的 NSArray,所以如果其中一个 UILabels 是nil您将不会得到一个大小为 8 的数组,而只有一个包含 UILabels 的数组。

由于您具有硬编码的循环大小,因此您可能最终会在数组之外进行索引。

于 2013-01-07T11:19:05.790 回答
-3

如果要更改对象,tableauScore则不能使用,NSArray因为NSArray它是不可变的。

使用 a NSMutableArray,重新配置您的标签并使用replaceObjectAtIndex:withObject:在数组中更改它们。

于 2013-01-07T11:06:58.793 回答