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を取得していますの呼びかけを取得しますが、私は二度目にされますそれを呼び出すことはいつものように働いています。だから私は何か手がかりを得ていないので、その場合私を助けてください。
あなたはsegueを実行しますか? –
は、実行するセグを呼び出すために必須ですか? – AADi
あなたのストーリーボードシーンを表示する – user3182143