我刚刚开始使用Object C和REST工具包
我创建了一个示例应用程序,并在MyAppDe委托文件中添加了RKRevestEdvest.
@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应用程序的结果!!!
因为这些东西不属于我的appdelegate。我要把它们移到我的模型中。在我的书名里我加了
@interface Titles : NSManagedObject <RKRequestDelegate> {
我又加了一个标题
+ (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];
当我现在运行时,我没有任何输出。
我在RKRebug文件中放了几个断点,一个在
- (void)didFinishLoad:(RKResponse*)response
中还有if测试:
if ([_delegate respondsToSelector:@selector(request:didLoadResponse:)]) {
[_delegate request:self didLoadResponse:finalResponse];
}
在第一次尝试成功时失败(当所有内容都在myappdelegate中时)
我在de debugger中检查了变量delate,它显示:第一次尝试时delegate=myappdelegate,第二次尝试时delegate=titles(两者都应该如此)
为什么respondstoselector失败了?(委托是正确的,方法在标题中存在)
最佳答案
您的问题是,您试图将类设置为委托:
+ (void) update {
[[RKClient sharedClient] get:@"/titles.json" delegate:self];
}
这里是类。
回调(如预期)是一个实例方法:
- (void) request: (RKRequest *) request didLoadResponse: (RKResponse *) response {
if ([request isGET]) {
NSLog (@"Retrieved : %@", [response bodyAsString]);
}
}
您应该拥有某种“datamodel”模型类(可能是“songlist”或其他有意义的类)。这通常是一个单实例,因此您有一个
self
实例。这个实例就是Titles
的委托。关于iphone - 代表不起作用(与Restkit有关?),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7365290/