2013-07-17 14 views
6

Używam Storyboard, że mam do czynienia z błędem, jak pokazano poniżej, że mój kod został pomyślnie wykonany, ale ich nie ma na stronie lub akcja w symulatorze pokazuje tylko czarny ekran po uruchomieniu obrazu.Programowo wyświetlając widok Storyboard

ClsMainPageAppDelegate.h

#import <UIKit/UIKit.h> 

@interface ClsMainPageAppDelegate : UIResponder <UIApplicationDelegate> 
@property (strong, nonatomic) UIWindow *window; 
@end 

ClsMainPageAppDelegate.m

#import "ClsMainPageAppDelegate.h" 
#import "ClsMainPageViewController.h" 
#import "ClsTermsandConditionViewController.h" 

@implementation ClsMainPageAppDelegate 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
// Override point for customization after application launch. 


NSUserDefaults *fetchDefaults = [NSUserDefaults standardUserDefaults]; 
int message = [fetchDefaults integerForKey:@"checkvalue"]; 
NSLog(@"Message Hello : %i",message); 

if(message == 1) 
{ 

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
    ClsMainPageViewController *mvc = [storyboard instantiateViewControllerWithIdentifier:@"BeIinformedPage"]; 
    [(UINavigationController*)self.window.rootViewController pushViewController:mvc animated:NO]; 
    NSLog(@"Launched Home Page"); 


} 
else 
{ 
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
    ClsTermsandConditionViewController *mvc = [storyboard instantiateViewControllerWithIdentifier:@"termsandConditionControl"]; 
    [(UINavigationController*)self.window.rootViewController pushViewController:mvc animated:NO]; 
    NSLog(@"Launched Terms and Conditions Page"); 
} 
return YES; 
} 

Błąd

Ten błąd I twarz, gdy nie jestem wybrać punkt wejścia w storybroad jest początkowe Zobacz Controll er.

2013-07-17 19:38:12.749 BeInformed[1011:c07] Failed to instantiate the default view 
controller for UIMainStoryboardFile 'MainStoryboard' - perhaps the designated entry 
point is not set? 
2013-07-17 19:38:16.127 BeInformed[1011:c07] Message Hello : 0 
2013-07-17 19:38:18.333 BeInformed[1011:c07] Launched Terms and Conditions Page 

Błąd

Ten błąd I twarz, gdy jestem wybrać punkt wejścia w storybroad jest początkowe View Controller (termsandConditionControl)

2013-07-17 19:53:19.839 BeInformed[1057:c07] Message Hello : 0 
2013-07-17 19:53:26.175 BeInformed[1057:c07] - [ClsTermsandConditionViewController 
pushViewController:animated:]: unrecognized selector sent to instance 0x71b2f50 
2013-07-17 19:53:26.176 BeInformed[1057:c07] *** Terminating app due to uncaught 
exception 'NSInvalidArgumentException', reason: '-[ClsTermsandConditionViewController 
pushViewController:animated:]: unrecognized selector sent to instance 0x71b2f50' 
+0

jaki jest twój storyboard skonfigurować? Czy kontroler nawigacyjny jest kontrolerem początkowym? Co to jest kontroler widoku głównego? – rdelmar

+0

Można wykonać pewne sprawdzanie błędów, aby sprawdzić, czy scenorys i widoki są pomyślnie zwracane. Ponadto "(UINavigationController *) self.window.rootViewController" wygląda podejrzanie i powinien zostać przetestowany. – Jenn

+0

Nie rozumiem, jak skonfigurować scenorys i jaki jest kontroler nawigacyjny, początkowy kontroler? proszę powiedz mi, jak mogę znać kontroler widoku root? wyjaśnij to i rozwiąż mój problem. –

Odpowiedz

5

Nawiasem mówiąc, wiem, że już rozwiązany Twój problem, ale chciałem tylko zasugerować inny przepływ. Alternatywnie, możesz zawsze zacząć od standardowej początkowej sceny (którą możesz wykonać bez żadnego kodu w delegacie aplikacji), ale musisz ustalić, czy potrzebujesz warunków (T &), a jeśli tak, to osobna scena modalnie (animowana lub nie animowana, jak ci się podoba). Możesz mieć potwierdzenie użytkownika T & C, a następnie odrzucić scenę warunków i wrócisz do standardowej "początkowej" sceny.

jeśli robisz to w ten sposób, twój T & C zostanie odrzucony, nie trzeba się bawić z zmieniając rootViewController programowo, górny poziom scena z kontrolera nawigacji zawsze pozostanie jako standard „sceny pierwotnej” więc rzeczy takie jak popToRootViewController działają bez najmniejszego trudu, nie musisz ukrywać paska nawigacyjnego na stronie T, itp. To również nadaje się do przepływu, w którym możesz przedstawić użytkownikowi opcję zobaczenia T & C ponownie (np. Pochowany w scenach "ustawień" lub "o", jeśli masz odpowiednie miejsce, żeby je pokazać).

A jeśli zastanawiasz się, jak programowo przejść do T & C, można zdefiniować segue od początkowej sceny do sceny T & C:

create segue

Następnie wybierz tę segue i dać to identyfikator:

segue identifier

A teraz twoja początkowa scena na viewWillAppear mógł performSegueWithIdentifier, takich jak:

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 

    BOOL hasAcceptedTermsAndConditions = ...; 

    if (!hasAcceptedTermsAndConditions) 
    { 
     [self performSegueWithIdentifier:@"TermsAndConditions" sender:self]; 
    } 
} 

Cieszę się rozwiązać problemu, ale ja po prostu chciałem zaproponować alternatywny przepływ.

0

OK Możliwe, że przegapiłeś przypisanie nazwy klasy/kontrolera w kontrolerze tożsamości do kontrolera w oknie wątku. Następnie sprawdź również swój plik plist, w którym masz wpis do storyboardu z właściwą nazwą storyboardu.

Mam nadzieję, że to działa. :)

4

wreszcie rozwiązać mój problem, użyłem ten kod

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
    ClsTermsandConditionViewController *ivc = [storyboard instantiateViewControllerWithIdentifier:@"termsandConditionControl"]; 
    UINavigationController *navigationController=[[UINavigationController alloc] initWithRootViewController:ivc]; 
    self.window.rootViewController=nil; 
    self.window.rootViewController = navigationController; 
    [navigationController setNavigationBarHidden:YES]; 
    [self.window makeKeyAndVisible]; 
Powiązane problemy