我刚刚开始使用 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];
当我现在运行时,我没有得到任何输出。我放了几个断点,一个在- (void)didFinishLoad:(RKResponse*)response
RKRequest 文件中,并且在那里进行 if 测试:
if ([_delegate respondsToSelector:@selector(request:didLoadResponse:)]) {
[_delegate request:self didLoadResponse:finalResponse];
}
在我第一次尝试成功时失败(当一切都在 MyAppDelegate 中时)
我在调试器中检查了变量 _delate,它说: _delegate = MyAppDelegate 在我的第一次尝试中和 _delegate = Titles 在我的第二次尝试中(两者都应该如此)
为什么 respondsToSelector 失败?(委托正确且方法存在于Titles中)