かなり複雑な質問がありますが、誰かが答えてくれたらとてもありがたいです。つまり、基本的に、行を選択すると別のビューに移動する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回目にロードされないのですか?