0

RestKitは2番目のリクエストを送信しません1つのビューと2つのボタンを持つシンプルなアプリケーションがありますボタンのタイトルは、最初にいずれかのボタンをクリックするとホスト名(yandex.ruとlocalhost:3000)になりますが、2回目にクリックするとリクエストは機能しますそれはそれを送信しません....私は何を間違えますか?

以下は私の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!"); 
   }
}
4

2 に答える 2

0

clientWithBaseURLString:問題は、最初に を呼び出すと、[RKClient sharedClient]シングルトンが初期化される (そして適切に保持される) ため、後続の呼び出しが機能することだと思います。コードを 2 回目に呼び出すと、コンビニエンス コンストラクターは、自動解放された RKClient のインスタンスを別のベース URL と共に返します。

RestKit で複数のベース URL を処理する正しい方法は、RKClient の 2 つの別々のインスタンスを管理することです。

@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 (.....)
....
}
于 2012-09-05T09:49:25.417 に答える
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];
}
于 2012-09-04T17:07:31.570 に答える