2016年6月18日土曜日

[iOS開発] autolayout engine from a background, and crashed.

This application is modifying the autolayout engine from a background thread, which can lead to engine corruption and weird crashes.


今日は表題のメッセージ出くわしたので、ちょっと投稿したい。こんなコードを書いていたのである。


- (void)viewDidLoadSetupSearchBar{
    
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT0), ^{
        // バックグラウンドで行う処理を記述
        [self some_process];


    });

   /....../

    

}


-(void)some_process{
    [self.view setNeedsUpdateConstraints];          // <- いけない子



   /....../

}


実行すると表題のメッセージ。
まあ、バックグラウンドでオートレイアウトを動かさないでということなのであった。そういえば、描画関係はバックグラウンドで処理させようとするとうまく動かないが、何か内部処理として関係があるのかもしれない。

いろいろ試しましたが、描画するときに main に戻せば問題ない模様。
auto layout engine .... がどうとかちょっと罠にはまってしまいました。

-(void)some_process{

       dispatch_async(dispatch_get_main_queue(), ^{
         [self.view setNeedsUpdateConstraints];          // <- いけない子

        /....../

        });

}


以上、こんな感じ。
ではでは。