1

かなり複雑な質問がありますが、誰かが答えてくれたらとてもありがたいです。つまり、基本的に、行を選択すると別のビューに移動するtableViewがあります。このdetailViewはWebサーバーにアクセスし、データを取得します。私の問題は、サーバーが見つからない場合です。

インターネット接続が不十分なため、またはサーバーが内部サーバーであるなどの理由でサーバーにアクセスできない場合は、アラートメッセージが表示されます。しかし、アラートメッセージで[OK]をクリックしてから、テーブルビューで別の行を選択すると、アラートメッセージが表示されません。また、2番目のクラス(私の場合はjsonviewcontroller)にも入りません。

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
//Navigation logic may go here. Create and push another view controller.
NSLog(@"DID SELECT");
Item *selectedItem = (Item *)[self.fetchedObjectsArray objectAtIndex:indexPath.row];
NSString * urlString = [CONST_FEED_DISCRIPTION_URL stringByAppendingString:selectedItem.guid];
NSDate * dateString = selectedItem.date;
JsonViewController *jsonViewController = [[JsonViewController alloc] initWithURLString:urlString date:dateString];
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" 
                                                               style:UIBarButtonItemStyleBordered
                                                              target:nil
                                                              action:nil];
self.navigationItem.backBarButtonItem = backButton;
self.navigationController.navigationBar.tintColor = [UIColor colorWithHexString:CONST_NAVIGATIONBAR_COLOR];
[self.navigationController pushViewController:jsonViewController animated:YES];
[backButton release];
[jsonViewController release];
}

別の行をクリックすると、このメソッドに入り、コードに記述されているナビゲーションバーなどの色が変更されますが、jsonviewcontrollerには正確には入りません。初めてですが。おそらく、viewwillappearからサービスにアクセスしているため、jSonviewcontrollerのビューがロードされず、ビューが表示されないため、viewdidloadに入らないためだと考えています。ここで何が欠けているのかわかりません。

- (void)viewWillAppear:(BOOL)animated
 {
     NSMutableURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://x"] cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:60];
_rssFeedDetailViewConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self];

    while(!finished) {
      [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
  }

}

NSURLConnectionのデリゲートメソッドも実装されています-

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
responseData = [[NSMutableData alloc] init];
  }

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
      [responseData appendData:data];
      _json_string = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];

  }

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
    if ([error code] == kCFURLErrorNotConnectedToInternet) {
        // if we can identify the error, we can present a more precise message to the user.
        NSDictionary *userInfo = [NSDictionary dictionaryWithObject:NSLocalizedString(@"No Connection Error", @"Error message displayed when not connected to the Internet.") forKey:NSLocalizedDescriptionKey];
         NSError *noConnectionError = [NSError errorWithDomain:NSCocoaErrorDomain code:kCFURLErrorNotConnectedToInternet userInfo:userInfo];
         [self handleError:noConnectionError];
} else {
     // otherwise handle the error generically
     [self handleError:error];
  }
     finished = FALSE;
     [responseData release];
     [connection release];
   // Show error message
 }

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
      finished = TRUE;
      [responseData release];
      [connection release];
 }

誰かがこれを手伝ってくれると本当に素晴らしいでしょう。ありがとうございました。もう一度私の質問は-なぜ私のJSONVIEWCONTROLLERがdidselectrowメソッドから2回目にロードされないのですか?

4

0 に答える 0