我是 iOS 编程的新手,我已经找不到答案了。在 Xcode 5 中,我正在迭代一个数组,并尝试在标签发生变化时使用它们更新的值。
这是.h文件...
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
@property (strong, nonatomic) NSArray *currentNumber;
@property (strong, nonatomic) IBOutlet UILabel *showLabel;
- (IBAction)start;
@end
这是.m文件的主要部分......
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
self.currentNumber = [NSArray arrayWithObjects:@"1", @"2", @"3", @"4", nil];
}
这就是它变得棘手的地方......
以下工作完美......
- (IBAction)start {
self.showLabel.text = [NSString stringWithFormat:@"new text"];
}
@end
就像这...
- (IBAction)start {
for (NSString *p in self.currentNumber) {
NSLog(@"%@", p);
sleep(3);
}
}
@end
但是当我用设置 .text 属性替换 NSLog 时,它“失败”。时间仍然会发生,并且标签会更新为数组中的最后一项......
- (IBAction)start {
for (NSString *p in self.currentNumber) {
self.showLabel.text = [NSString stringWithFormat:@"%@", p];
sleep(3);
}
}
@end
最后一点奇怪的是,如果我使用 NSLog,并尝试在调用“for”循环之前更改 .text 属性,则文本更改将被忽略,直到循环完成后...
- (IBAction)start {
self.showLabel.text = [NSString stringWithFormat:@"5"];
for (NSString *p in self.currentNumber) {
NSLog(@"%@", p);
sleep(3);
}
}
@end
我错过了什么?
(如果你想查看源文件,你可以在https://github.com/lamarrg/iterate