ブロックを使用して RestKit を実験するテストを作成しました。RKRequest.onDidLoadResponse
メインの UI スレッドで応答を取得するには、呼び出しを含める必要があると考えていましたdispatch_async()
が、驚いたことに、これにより実行時例外が発生することが判明したため、それを取り出して、インターフェイスを非常にうまく更新することができました。
問題の私のコードは次のとおりです。
- (IBAction)loadSeasons:(UIButton *)sender {
[[RKClient sharedClient] get:@"/api/v1/seasons" usingBlock:^(RKRequest* req) {
req.onDidLoadResponse = ^(RKResponse* res) {
NSLog(@"Request Performed: %@", res.bodyAsString);
self.textResponse.text = res.bodyAsString;
//dispatch_async(dispatch_get_main_queue(), ^{
// NSLog(@"In main queue: %@", res.bodyAsString);
//});
};
}];
}
dispatch_async
ブロックのコメントを外すと、例外が発生します。では、いつこれを使用する必要があり、いつ使用する必要がないかをどのように知ることができますか? 実行中のコードがメインスレッド上にあるかどうかをテストする必要がありますか?
私はObjective-Cが初めてで、まだ始まったばかりなので、初心者の質問かもしれないことをお詫びします。
UPDATE : 上記のコードのコメントを外すと、次のことが起こります。
(lldb)
コンソールは青色のテキストを出力し、他の情報は提供されません。- objc_msgSendの中断
libobjc.A.dylib
:is shown in the editor on
0x1c2009b: movl 8(%edx), %ediwith the message in green:
Thread 1: EXC_BAD_ACCESS (code=1, address=0x40000008)`。