尽管`addObject`,NSMutableArray.count是1

时间:2014-06-02 14:36:31

标签: objective-c nsmutablearray arc4random

_labelView之后添加四个-addLabel后,我希望_labelView随机移动所有-moveLabel。 LabelView是UIView的子类。

但是在这个代码的情况下,我只能移动一个_labelView,我最后添加了。{ 看NSLog(@"%d",_viewsArray.count),输出" 1"。
如何修复它以移动所有_labelView

enter image description here

@property (nonatomic, strong) LabelView* labelView;
@property (nonatomic, strong) NSMutableArray* viewsArray;

- (void)addLabel
{
    _viewsArray = [[NSMutableArray alloc]init];
    _labelView = [[LabelView alloc]initWithFrame:CGRectMake(0, 0, 200, 25)];
    [_viewsArray addObject:_labelView];
    for (_labelView in _viewsArray){
        [self.view addSubview:_labelView];
    }
    NSLog(@"%d", _viewsArray.count);
}

- (void)moveLabel
{
    int n;
    CGPoint labelFrame;
    for (_labelView in _viewsArray)
    {
        n = arc4random() % 4;
        switch (n) {
            case 0: labelFrame = CGPointMake(30, 50);
                break;
            case 1: labelFrame = CGPointMake(30, 100);
                break;
            case 2: labelFrame = CGPointMake(30, 150);
                break;
            case 3: labelFrame = CGPointMake(30, 200);
                break;
            default:
                break;
        }
        [UIView animateWithDuration:0.5f delay:0.0f options:UIViewAnimationCurveEaseIn
                         animations:^{_labelView.center = labelFrame;} completion:^(BOOL finished){}];
    }
    NSLog(@"%d", _viewsArray.count);
}

3 个答案:

答案 0 :(得分:4)

在addLabel方法中,每次添加新标签时都会分配NSMutableArray:

_viewsArray = [[NSMutableArray alloc]init];

所以你在这个数组中只有一个对象。 简单地将这一行移动到viewDidLoad方法(或者如果它不是视图控制器子类的某些init方法),它应该修复它。

答案 1 :(得分:0)

每次调用addView时都要分配一个新的_viewsArray! 你应该在viewDidLoad或其他东西分配数组,然后只使用它

答案 2 :(得分:0)

最简单的修复......

- (void)addLabel {
    if (_viewsArray == nil) {
        _viewsArray = [[NSMutableArray alloc] init];
    }