Objective C と Restkit を使い始めたばかりです
サンプル アプリケーションを作成し、MyAppDelegate ファイルに RKRequestDelegate を追加しました
@interface MyAppDelegate : NSObject <UIApplicationDelegate, RKRequestDelegate> {…
と追加
RKClient* client = [RKClient clientWithBaseURL:@"http://localhost:3000"];
NSLog(@"I am your RKClient singleton : %@", [RKClient sharedClient]);
[client get:@"/titles.json" delegate:self];
の MyAppDelegate.m に
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions method
MyAppDelegate.m にもメソッドを追加しました
- (void) request: (RKRequest *) request didLoadResponse: (RKResponse *) response {
if ([request isGET]) {
NSLog (@"Retrieved : %@", [response bodyAsString]);
}
}
これまでのところ、すべてがうまく機能しており、Rails アプリの結果が出力に表示されます!!!
それらは MyAppDelegate.m に属していないので、私はそれを自分のモデルに移動しています。Titles.h に追加しました
@interface Titles : NSManagedObject <RKRequestDelegate> {
Titles.mに追加しました
+ (void) update {
[[RKClient sharedClient] get:@"/titles.json" delegate:self];
}
と
- (void) request: (RKRequest *) request didLoadResponse: (RKResponse *) response {
if ([request isGET]) {
NSLog (@"Retrieved : %@", [response bodyAsString]);
}
}
MyAppDelegate.m で次のように置き換えました。
RKClient* client = [RKClient clientWithBaseURL:@"http://localhost:3000"];
NSLog(@"I am your RKClient singleton : %@", [RKClient sharedClient]);
[client get:@"/titles.json" delegate:self];
と
RKClient* client = [RKClient clientWithBaseURL:@"http://localhost:3000"];
NSLog(@"I am your RKClient singleton : %@", [RKClient sharedClient]);
[Titles update];
今実行すると、出力が得られません。いくつかのブレークポイントを配置しました。1 つ- (void)didFinishLoad:(RKResponse*)response
は RKRequest ファイル内にあり、そこには if テストがあります。
if ([_delegate respondsToSelector:@selector(request:didLoadResponse:)]) {
[_delegate request:self didLoadResponse:finalResponse];
}
最初の試行で成功している間は失敗します (すべてが MyAppDelegate にある場合)
デバッガーで変数 _delate を確認したところ、最初の試行では _delegate = MyAppDelegate 、2 回目の試行では _delegate = Titles と表示されました (両方ともそうあるべきです)。
RespondsToSelector が失敗するのはなぜですか? (デリゲートは正しく、メソッドはタイトルに存在します)