UITextView가 프레임에로드 된 뷰 컨트롤러가 있습니다. 함수 자체를 호출 할 때마다 UITextView 텍스트를 업데이트하고 싶습니다.재귀 함수 실행 중 UITextView가 실행 중입니다.
메인 스레드에서 UITextView를 업데이트하려고 시도하지만 재귀 기능이 실행 된 후에 View UNTIL의 텍스트를 설정하지 않은 것처럼 보입니다.
'Maze.h'는 프로토콜을 정의하는 객체이고 'MainViewController.m'은 위임자입니다. Heres는
컨트롤러에 대한 코드 :
는'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];
...
...
}
UITextView 그냥 -(BOOL)solve:::
실행이 완료 될 때까지 업데이트하지 않는 것 같습니다. 이는 여러 번 업데이트되는 것이 아니라 한 번만 업데이트됩니다.
왜 이런 일이 발생하는지 잘 모름.
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);
}
});
달콤한 .... 내가 말한 것처럼 재귀 함수가 백그라운드에서 실행되도록해야만 ... 감사합니다 레오 .. – jsetting32
건배. 대답이 도움이 되었다면 동의하십시오. –