gpt4 book ai didi

iphone - 委托(delegate)不工作(与 Restkit 相关?)

转载 作者:搜寻专家 更新时间:2023-10-30 20:07:00 25 4
gpt4 key购买 nike

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

当我现在运行时,我没有得到任何输出。我放了几个断点,一个在 RKRequest 文件的 - (void)didFinishLoad:(RKResponse*)response 中还有 if 测试:

if ([_delegate respondsToSelector:@selector(request:didLoadResponse:)]) {
[_delegate request:self didLoadResponse:finalResponse];
}

在我第一次尝试成功时失败(当一切都在 MyAppDelegate 中时)

我在 de 调试器中检查了变量 _delate,它说:第一次尝试是 _delegate = MyAppDelegate,第二次尝试是 _delegate = Titles(两者都应该如此)

为什么 respondsToSelector 会失败? (委托(delegate)是正确的,方法存在于Titles中)

最佳答案

你的问题是你试图将一个类设置为委托(delegate):

+ (void) update {   
[[RKClient sharedClient] get:@"/titles.json" delegate:self];
}

self 这里是 class Titles

回调是(如预期的那样)一个实例方法:

- (void) request: (RKRequest *) request didLoadResponse: (RKResponse *) response {
if ([request isGET]) {
NSLog (@"Retrieved : %@", [response bodyAsString]);
}
}

您应该有某种“DataModel”模型类(也许是“SongList”或任何有意义的)。这通常是一个单例,所以你有一个 +sharedModel 实例。该实例是 RKClient 的委托(delegate)。

关于iphone - 委托(delegate)不工作(与 Restkit 相关?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7365290/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com