RestKit不发送第二个请求

时间:2012-09-04 16:28:35

标签: restkit

RestKit不发送第二个请求 我有一个简单的应用程序,1个视图和2个按钮 按钮的标题是主机名(yandex.ru和localhost:3000) 当我第一次点击任何按钮时 请求有效 但如果我第二次点击任何它不发送它.... 我做错了什么?

下面的

是我的ViewController

代码的一部分
- (IBAction)testRestkit:(UIButton *)sender
{
   RKClient *client =[RKClient clientWithBaseURLString:[NSString stringWithFormat:@"http://%@",sender.titleLabel.text]];
   client.cachePolicy = RKRequestCachePolicyNone;
   [client get:nil delegate:self];
}

- (void)requestWillPrepareForSend:(RKRequest *)request
 {
   NSLog(@"Preparing for request......");
 }

- (void)request:(RKRequest *)request didFailLoadWithError:(NSError *)error
{
   NSLog(@"%@",[error localizedDescription]);
}

- (void)request:(RKRequest *)request didLoadResponse:(RKResponse *)response
{
   if ([response isHTML]) {
     NSLog(@"Loaded html!");
   } else{
     NSLog(@"Loaded some response!"); 
   }
}

2 个答案:

答案 0 :(得分:0)

如果我发送下面的代码请求。他们工作!!!! 有人可以解释两种方法之间的区别???

- (IBAction)testRestkit:(UIButton *)sender 
{    
   NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http://%@",sender.titleLabel.text]]; 
   RKRequest *theRequest = [[RKRequest alloc] initWithURL:url];
   theRequest.queue = [RKClient sharedClient].requestQueue;
   theRequest.delegate = self;
   [theRequest setMethod:RKRequestMethodGET];
   [theRequest send];
}

答案 1 :(得分:0)

我认为问题在于,第一次调用clientWithBaseURLString:时,[RKClient sharedClient]单例被初始化(并且被正确保留),因此后续调用确实有效。当你第二次调用代码时,方便构造函数会返回一个自动释放的RKClient实例和另一个基本URL。

在RestKit中处理多个基本URL的正确方法是管理两个独立的RKClient实例,例如:

@property (nonatomic, retain) RKClient *localhostClient;
@property (nonatomic, retain) RKClient *remoteClient;

并初始化它们,例如。在你的init方法中(或懒惰地在你的方法中)。

static NSString *kRemoteServerUrl = @"http://yandex.ru";
- (IBAction)testRestkit:(UIButton *)sender
{
   RKClient *client = nil;
   if ([sender.titleLabel.text isEqualToString:kRemoteServerUrl]) {
       if (!self.remoteClient) { 
          self.remoteClient = [RKClient clientWithBaseURLString:kRemoteServerUrl];
          client.cachePolicy = RKRequestCachePolicyNone;
       }
       [self.remoteClient get:nil delegate:self];
   } else if (.....)
....
}