【问题标题】:NSMutableArray resets itselfNSMutableArray 自行重置
【发布时间】:2014-10-11 11:22:29
【问题描述】:

我正在对两个可变数组执行一些基本操作。但是,该程序的行为很奇怪。第二个数组在函数结束后自行重置。

首先,我为两个数组分配内存。然后我用 0..10 的数字填充 originalArray。

我的代码如下所示。

ViewController.h

@property (nonatomic, strong) NSMutableArray *originalArray;
@property (nonatomic, strong) NSMutableArray *secondArray;

ViewController.c

static int level=1;

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self firstArrayInit];
    [self secondArrayInit];

    [self startDisplaying];

}

-(void) firstArrayInit{
    self.originalArray = [NSMutableArray array];
    for (int i=0; i<10; i++) {
        [self.originalArray addObject:[NSNumber numberWithInteger:i]];
    }

}

-(void)secondArrayInit{
    self.secondArray = [[NSMutableArray alloc]init];

}

-(void) startDisplaying{ 
        NSLog(@"Initial Array is %@", self.originalArray);

        self.mytimer = [NSTimer scheduledTimerWithTimeInterval:2
                                                target:self
                                              selector:@selector(displayNumber)
                                              userInfo:nil
                                               repeats:YES];
        NSLog(@"SecondA: %@", self.secondArray); //prints EMPTY ARRAY!!


}

-(void) displayNumber{
    static int num=0;
   NSLog(@"Num: %d", num);
   NSLog(@"Level: %d", level);

    if (num < level){
        //display on a label
        myLabel.text = [NSString stringWithFormat:@"%@", [self.originalArray objectAtIndex:num]];
        [self addToSecondArray:num];
        num++;
        NSLog(@"SecondA: %@", self.secondArray); //prints the contents of Array FINE!!

    }
    else{
        NSLog(@"SecondA2: %@", self.secondArray); //PRINTS EMPTY ARRAY!!
    }
}

-(void)addToSecondArray:(int)myNumber{
    [self.secondArray addObject:[self.originalArray objectAtIndex:myNumber]];

}

输出:

Initial Array is (
    0,
    1,
    2,
    3,
    4,
    5,
    6,
    7,
    8,
    9
)

Num: 0
Level: 1

SecondA: (
    0
)

Num:1
Level: 1

SecondA2: (
)

【问题讨论】:

  • 这段代码单独完全没用。通过调用startDisplaying、viewDidLoad、viewWill/DidAppear 等发布整个代码。
  • 我已经编辑了我的帖子。
  • 向我们展示声明。
  • startDisplaying 中会为空,因为尚未调用 displayNumber。
  • 我猜你的问题是SecondA2不应该是空的? level 的值是多少?应用的输出是什么(输出发生的顺序也很重要)?

标签: ios objective-c arrays nsmutablearray


【解决方案1】:

我在上面复制并粘贴了您的代码,得到的输出与您显示的不同。你是在设备上运行它吗?也许设备有旧版本的构建?

这是我得到的结果,secondArray 看起来不错。正如计时器所期望的那样,最后三行日志记录每两秒重复一次。

在您的输出中似乎有些奇怪的是,SecondA 值的第一个日志记录丢失了。

2014-10-11 07:29:05.419 test[58826:1475246] Initial Array is (
    0,
    1,
    2,
    3,
    4,
    5,
    6,
    7,
    8,
    9
)
2014-10-11 07:29:05.420 test[58826:1475246] SecondA: (
)
2014-10-11 07:29:07.420 test[58826:1475246] Num: 0
2014-10-11 07:29:07.420 test[58826:1475246] Level: 1
2014-10-11 07:29:07.420 test[58826:1475246] SecondA: (
    0
)
2014-10-11 07:29:09.420 test[58826:1475246] Num: 1
2014-10-11 07:29:09.420 test[58826:1475246] Level: 1
2014-10-11 07:29:09.420 test[58826:1475246] SecondA2: (
    0
)
2014-10-11 07:29:11.420 test[58826:1475246] Num: 1
2014-10-11 07:29:11.420 test[58826:1475246] Level: 1
2014-10-11 07:29:11.420 test[58826:1475246] SecondA2: (
0
)
2014-10-11 07:29:13.419 test[58826:1475246] Num: 1
2014-10-11 07:29:13.420 test[58826:1475246] Level: 1
2014-10-11 07:29:13.420 test[58826:1475246] SecondA2: (
    0
)
2014-10-11 07:29:15.419 test[58826:1475246] Num: 1
2014-10-11 07:29:15.420 test[58826:1475246] Level: 1
2014-10-11 07:29:15.420 test[58826:1475246] SecondA2: (
    0
)
2014-10-11 07:29:17.419 test[58826:1475246] Num: 1
2014-10-11 07:29:17.420 test[58826:1475246] Level: 1
2014-10-11 07:29:17.420 test[58826:1475246] SecondA2: (
    0
)

【讨论】:

  • 我在模拟器上运行它。在我将 Xcode 更新到新版本 (6.0.1) 之前它工作正常。
  • 肯定是您的环境有问题,而不是您的代码。
  • 经过一点调试,我发现两个视图控制器之间的链接断开了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-15
  • 2013-04-03
  • 1970-01-01
  • 2011-01-08
  • 1970-01-01
  • 2021-06-25
  • 2011-11-29
相关资源
最近更新 更多