Я только начинаю работать с Objective C и Restkit.
Я создал образец приложения и добавил RKRequestDelegate в файл MyAppDelegate.
@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];
когда я бегу сейчас, я не получаю никакого вывода. Я поставил несколько точек останова, одну в - (void)didFinishLoad:(RKResponse*)response
в файле RKRequest и там тест if для:
if ([_delegate respondsToSelector:@selector(request:didLoadResponse:)]) {
[_delegate request:self didLoadResponse:finalResponse];
}
терпит неудачу, в то время как это удается в моей первой попытке (когда все находится в MyAppDelegate)
Я проверил переменную _delegate в отладчике, и она говорит: _delegate = MyAppDelegate в моей первой попытке и _delegate = Titles в моей второй попытке (как и должно быть)
Почему не работает responsesToSelector? (делегат правильный, и метод существует в заголовках)