id
-variableには、ブロックを割り当てて後で呼び出すことができます。不透明なポインタIDでこれは動作しません(EXC_BAD_ACCESS)。Objective-C:idと不透明なポインタIDの違いは何ですか?
RestKitでは、userDataオブジェクトは "不透明なポインタ"です。今、ブロック変数を割り当てて、リクエストが終了した後にこのブロックを呼びたいと思います。しかし、このEXC_BAD_ACCESSのために動作しません。この不透明なポインタをブロックに割り当てるためのユーザーがいる可能性はありますか?
ありがとうございます!
EDIT:
// this works
id testId = ^{
NSLog(@"hello");
};
testId();
// this doesn't - but it's important to know RestKit
void (^postNotification)(void) = objectLoader.userData // EXC_BAD_ACCESS
postNotification();
objectLoaderはタイプRKObjectLoader
(RKRequest
のサブクラス)のものであり、APIはuserData
についてこう述べています。An opaque pointer to associate user defined data with the request.
コード例を参考にしてください。 – Joe
'objectLoader.userData'は実際に何かに設定されていますか?このような不透明なポインタを定義することは、たとえばURLリクエストを処理するクラスの特定のインスタンスにコンテキストを与える非常に一般的な方法です。 – mattjgalloway
はい;私はオブジェクトにブロックをラップしようとしました。例えばブロックプロパティを持つBlockObject。 'BlockObject * blockObject =(BlockObject *)objectLoader.userData;'を得るのは問題ありませんが、 'blockObject.postNotificationBlock'を試してすぐに、私は再び' EXC_BAD_ACCESS'を取得します。 BlockObjectは同じオブジェクトです(userDataから取得するかどうかを設定します)。 – swalkner