【发布时间】:2014-11-16 19:00:43
【问题描述】:
我有一个 UITextView 加载到框架中的视图控制器。每次函数调用自身时,我都想更新 UITextView 的文本。
我尝试在主线程上更新 UITextView,但在递归函数运行完成后,它似乎没有设置 View UNTIL 的文本。
'Maze.h' 是定义协议的对象,'MainViewController.m' 是委托。
这是控制器的代码:
'MainViewController.m'
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
Maze *aMaze = [[Maze alloc] initWithMaze:@"Maze.txt" andUpdate:true everyXSeconds:1];
[aMaze setDelegate:self];
if (![aMaze parseFile]) {
exit(2);
}
if ([aMaze solve:-1 y:-1 z:-1]){
NSLog(@"%@", [aMaze printMazeHorizontally]);
NSLog(@"Escapable: %@", [aMaze getMoveSequence]);
} else {
NSLog(@"Unescapable");
exit(1);
}
}
- (void)didMakeMove:(NSString *)maze {
NSLog(@"%@", maze);
dispatch_async(dispatch_get_main_queue(), ^{
[self.maze setText:maze];
});
}
'Maze.m'
- (BOOL)solve:(NSInteger)x y:(NSInteger)y z:(NSInteger)z
{
...
...
[self.delegate didMakeMove:self.printMazeVertically];
...
...
}
在-(BOOL)solve::: 运行完成之前,UITextView 似乎不会更新。只更新一次而不是多次。
不知道为什么会这样。
关于如何更新 UITextView 的任何想法?
我认为更新 UI 应该在主线程上完成?
Solution:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
if ([aMaze solve:-1 y:-1 z:-1]){
NSLog(@"%@", [aMaze printMazeHorizontally]);
NSLog(@"Escapable: %@", [aMaze getMoveSequence]);
} else {
NSLog(@"Unescapable");
exit(1);
}
});
【问题讨论】:
标签: objective-c recursion delegates uitextview