簡體   English   中英

在didSelectRowAtIndexPath之前調用的PrepareForSegue

[英]PrepareForSegue called before didSelectRowAtIndexPath

我在didSelectRowAtIndexPath中調用以下方法。

- (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];

}

之后,我在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,但是在第二次調用時,它照常工作。 在這種情況下,請幫助我,因為我沒有任何線索。

首先斷開segue從細胞到nextViewController 並從當前ViewController到您的nextViewController進行新的nextViewController如下面的屏幕截圖所示 在此處輸入圖片說明

處理完要在didSelectRowAtIndexPath中調用的API后,將通過以下代碼執行segue。

[self performSegueWithIdentifier: @"Show Notification" sender: self];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM