我刚刚开始使用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/

10-11 02:18