一部のコードがバックグラウンド スレッドで実行されている間に、UIProgressBar を更新してロードしようとしています。バックグラウンド スレッドが読み込みを完了してアバターを作成したら、変数 avatarFinishedLoading を TRUE に更新する必要があります。これにより、Open GL ES 更新メソッド内のコードが機能し始めます。
- (void)viewDidAppear:(BOOL)animated
{
[self performSelectorOnMainThread:@selector(updateProgressBar) withObject:nil waitUntilDone:NO];
dispatch_queue_t loadAvatarAndFrames = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(loadAvatarAndFrames, ^{
[self createAvatar];
dispatch_async(dispatch_get_main_queue(), ^{
avatarFinishedLoading = TRUE;
});
});
}
- (void)updateProgressBar {
float progress = [threadProgressView progress];
if (progress < 1) {
threadProgressView.progress = progress + (float)0.01;
[NSTimer scheduledTimerWithTimeInterval:0.05 target:self selector:@selector(updateProgressBar) userInfo:nil repeats:NO];
}else{
[threadProgressView setHidden:TRUE];
}
}
- (void)update
{
// Set colour of background
glClearColor(self.backgroundColour.x, self.backgroundColour.y, self.backgroundColour.z, self.backgroundColour.w);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
if (avatarFinishedLoading == TRUE){
//Do Some Code
}
}
アプリケーションが次のエラー メッセージでクラッシュする: 0xf5a2503: movzwl (%eax,%ecx,2), %eax exec_bad_access
私には問題ないように見えるので、どこが間違っているのかわかりません。
編集
バックグラウンド スレッドでこのコードを実行すると、GL エラー: 1280 が発生するようです。メイン スレッドで「createAvatar」メソッドを実行すると、GL エラーは発生せず、アバターは期待どおりにレンダリングされます。
ありがとう