[英]didSelectRowAtIndexPath gets called but not 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,但是在第二次調用時,它照常工作。 在這種情況下,請幫助我,因為我沒有任何線索。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.