1

我正在尝试使用 NSMutable 数组更新 UITextview 文本,但 String1 没有使用 String2、String3 等进行更新。我在编码时做错了什么。

Array = [[NSMutableArray alloc]initWithObjects:@"String1",@"String2",@"String3",@"String4", @"String5",..... nil];           

[NSTimer scheduledTimerWithTimeInterval:2.0
                                 target:self
                               selector:@selector(updateText)
                               userInfo:nil
                                repeats:YES];

self.textView.text = @"String1";

- (void)updateText {
int index = [Array count];

for(int i = index; i < Array.count; i++){

self.textView.text = [Array objectAtIndex:i];
}}
4

2 回答 2

1

不能Array用作变量名。那是一个保留字。此外,您正在将标准数组初始化为 NSMutableArray。如果您想要标准数组的可变副本,只需执行以下操作:

NSMutableArray *yourMutableArray = standardArray.mutableCopy;

或者只是将其初始化为 mutableArray:

NSMutableArray *yourMutableArray = [[NSMutableArray alloc]initWithObjects:@"String1",@"String2",@"String3",@"String4", @"String5",..... nil];   

查看上面的 updateText 函数:您在数组末尾开始循环,并且循环仅到达数组末尾。它甚至不会进入循环。

于 2013-01-24T23:11:57.123 回答
1

以下代码工作正常(用此替换您的 updateText 并检查)

- (void)updateText {
   static int counter=0;
   int index = [Array count];
   counter=++counter%index;//increase the counter...but make sure that if it gets greater than the number of strings in array....it gets back to 0
   self.textView.text = [Array objectAtIndex:counter];    
}

你的代码有一些错误:
1)第一行中的点必须离开(我猜你知道..只是说)
2)在updateText中你说(我写了计算机会看到的......当试图执行你的代码时!)

int index = [Array count];//5 for example
for(int i = 5; i < 5; i++){
   self.textView.text = [Array objectAtIndex:i];
}

所以这条线

self.textView.text = [Array objectAtIndex:i];

永远不会被执行;

3)最后,即使您将 for 循环更改为:

int index = [Array count];//5 for example
for(int i = 0; i < index; i++){
   self.textView.text = [Array objectAtIndex:i];
}

会发生什么(例如,我假设 Array 中有 5 个字符串): 当 updateText 运行时....for 循环立即执行....i 变得非常快并且 2..3..4..5文本从“String1”变为“String2”......“String3”..“String4”......最后是“String5”,速度如此之快,以至于您只能看到从“String1”变为“String5”
之后......每 2 秒.....updateText 再次执行......同样的事情也会发生。所以你看到的是......文本“改变”......从“String5”......到“String5”......所以你看不到任何事情发生!
希望那很清楚。

于 2013-01-25T03:38:30.283 回答