2016-06-24 1 views
0

Я хотел бы изменить rootViewController динамически. Это зависит от ответа json. У меня есть значение BOOL, оно изменяется после получения ответа json. Проблема в том, что это значение никогда не изменяется, даже если условие истинно.iOS Изменение rootViewController динамически

мой код ниже, я положил его в didFinishLaunchingWithOptions применения:

isTime = NO; 
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString: 
                  [url 
                   stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding] ]]; 


__block NSDictionary * json; 
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response,NSData *data,NSError *connectionError){ 
     json = [NSJSONSerialization JSONObjectWithData:data options:0 error:&connectionError]; 
    NSLog(@"JSON >>>> %@",[json objectForKey:@"status"]); 
    if ([[json objectForKey:@"status"] isEqualToString:@"ok"]) { 
     isTime = YES; 
    } 
}]; 
if(isTime){ 
//rootView1 
}else{ 
//rootView2 
} 

Как я могу исправить это? Есть идеи?

+0

в '-приложении: didFinishLaunchingWithOptions:' вы не должны делать такую ​​вещь, __Все вся концепция совершенно неверна. вам нужно как можно быстрее закончить ланч и начать работу с вашими рабочими сетевыми операциями _after_. – holex

ответ

1

довольно просто, изменить окно -rootViewController

-(void) changeRootViewController:(UIViewController*) vc { 
    [[[[UIApplication sharedApplication] delegate] window] setRootViewController: vc]; 
} 

С его было долгое время с момента последнего времени я написал в ObjC там могут быть синтаксическими ошибками, но я думаю, что это может дать вам идею.

+0

ok Я попробую :) – Rockers23

+0

это работает thnx :) – Rockers23

2

Изменить код, как указано ниже.

{ 
    NSURLRequest *request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString: 
                   [url 
                    stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding] ]]; 


__block NSDictionary * json; 
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response,NSData *data,NSError *connectionError){ 
     json = [NSJSONSerialization JSONObjectWithData:data options:0 error:&connectionError]; 
    NSLog(@"JSON >>>> %@",[json objectForKey:@"status"]); 
    if ([[json objectForKey:@"status"] isEqualToString:@"ok"]) { 
     //rootView1 
     //Change RootVC to RootView1 
    } 
    else { 
     //rootView2 
     //Change RootVC to RootView2 
    } 

}]; 

//Add LoadingVC (Intermediate) RootVC 

} 

-(void) changeRootViewController:(UIViewController*) viewController { 
    [[[[UIApplication sharedApplication] delegate] window] setRootViewController: viewController]; 
} 
+0

Я сделал это, и приложение вышло из строя: окна приложения должны иметь контроллер корневого представления в конце запуска приложения. – Rockers23

0

// пробуем как этот

isTime = NO; 
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString: 
                 [url 
                  stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding] ]]; 


__block NSDictionary * json; 
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response,NSData *data,NSError *connectionError){ 
    json = [NSJSONSerialization JSONObjectWithData:data options:0 error:&connectionError]; 
NSLog(@"JSON >>>> %@",[json objectForKey:@"status"]); 
if ([[json objectForKey:@"status"] isEqualToString:@"ok"]) { 
    [self changeRootController:YES]; 
} else { 
    [self changeRootController:NO]; 
} 
}]; 


-(void)changeRootController:(Bool)change { 
    if(change){ 
     //rootView1 
    } else{ 
    //rootView2 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^