2016-09-21 3 views
0

didSelectRowAtIndexPathで次のメソッドを呼び出しています。didAelectRowAtIndexPathの前にPrepareForSegueが呼び出されました

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath: (NSIndexPath *)indexPath{ 
[self unreadMessageCounter]; 
} 

このメソッドでは、パラメータ名 "MsgCount"で値を取得しています。そのために書かれたコードはです。

-(void) unreadMessageCounter{ 
NSUserDefaults *defaultUser=[NSUserDefaults standardUserDefaults]; 
NSString* username = [defaultUser objectForKey:KUserName]; 
NSString* password = [defaultUser objectForKey:KPassword]; 
dispatch_async(dispatch_get_main_queue(), ^{ 
    [SVProgressHUD showWithStatus:@"Loading..."  maskType:SVProgressHUDMaskTypeGradient]; 
}); 

NSString *url3 ; 
NSString *base_url=[[NSUserDefaults standardUserDefaults]  objectForKey:@"BASE_URL"]; 
url3=[[NSString alloc]initWithFormat:@"%@%@? username=%@&password=%@&deviceUniqueId=%@",base_url,MESSAGE_COUNTER,username,password,[defaultUser objectForKey:KDeviceToken]]; 
[defaultUser synchronize]; 


NSURL *requestURL = [NSURL URLWithString:[url3 stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; 
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 
[request setURL:requestURL]; 
[request setHTTPMethod:@"GET"]; 
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; 
NSURLSession *session = [NSURLSession sharedSession]; 
NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *urlResponse, NSError *error) { 
    NSHTTPURLResponse *response = (NSHTTPURLResponse *)urlResponse; 
    NSLog(@"Response Code For Message Counter:: %ld", (long)[response statusCode]); 
    if(response){ 
     NSMutableDictionary *returneDict = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error]; 
     NSLog(@"Return Dict For Message Counter:: %@", returneDict); 

     if (returneDict != nil) { 
      if ([returneDict valueForKey:@"valueSet"]){ 
       for (NSDictionary *dict in [returneDict valueForKey:@"valueList"]) { 
        _counterNumber = dict[@"MsgCount"]; 
        NSLog(@"counter number %@", _counterNumber); 
       } 
      } 
      else{ 
       dispatch_async(dispatch_get_main_queue(), ^{ 
        [SVProgressHUD dismiss]; 
       }); 
      } 
     } 
     else{ 
      dispatch_async(dispatch_get_main_queue(), ^{ 
       [SVProgressHUD dismiss]; 
      }); 
     } 
    } 
}]; 
[task resume]; 

}

Iは、以下のコードであることのために、prepareForSegueの助けを借りて、次のビューコントローラにその_counterNumber列を通過しています。その後。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 

if (![segue.identifier isEqualToString:@"Show Notification"]) { 
    UINavigationController *nav = [segue destinationViewController]; 
    WelcomeScreenViewController *welcomeScreenViewController =  (WelcomeScreenViewController *)nav.topViewController; 
    welcomeScreenViewController.counterString = _counterNumber; 
    } 
} 

それは、次のビューコントローラに行っていたが、最初の呼び出し時に、didselectrowatindexpath代わりのunreadMessageCounter方法の後、prepareForSegueはなぜ_counterNumber値が、私はnilを取得していますの呼びかけを取得しますが、私は二度目にされますそれを呼び出すことはいつものように働いています。だから私は何か手がかりを得ていないので、その場合私を助けてください。

+0

あなたはsegueを実行しますか? –

+0

は、実行するセグを呼び出すために必須ですか? – AADi

+0

あなたのストーリーボードシーンを表示する – user3182143

答えて

1

最初にsegueをセルからnextViewControllerに切断します。そして、あなたのnextViewController

そして、あなたはdidSelectRowAtIndexPathに呼び出しているあなたのAPIを処理した後

enter image description hereスクリーンショット以下のように現在のViewControllerから新しいセグエを作成し、以下のようなコードを通じてセグエを行います。

[self performSegueWithIdentifier: @"Show Notification" sender: self]; 
関連する問題