2013-07-17 18 views
6

Ich benutze Storyboard, dass ich Fehler wie unten gezeigt bin, wird mein Code erfolgreich ausgeführt, aber es ist keine Seite zeigen oder Aktion im Simulator zeigen nur schwarzen Bildschirm nach dem Start des Bildes.Programmatisch Storyboard-Ansicht anzeigen

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; 
} 

Fehler

Dieser Fehler i Gesicht, wenn ich bin nicht Einstiegspunkt wählen in storybroad Initial ist Kontrollansicht anzeigen 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 

Fehler

Dieser Fehler i Gesicht, als ich Einstiegspunkt in storybroad ist Initial-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

Wie ist Ihr Storyboard einrichten? Ist ein Navigationscontroller der anfängliche Controller? Was ist der Root View Controller? – rdelmar

+0

Sie könnten eine Fehlerüberprüfung durchführen, um zu sehen, ob Storyboard und Views erfolgreich zurückgegeben werden. Außerdem sieht '(UINavigationController *) self.window.rootViewController' verdächtig aus und sollte getestet werden. – Jenn

+0

Ich verstehe nicht, wie ich Storyboard einrichten und was Navigationscontroller der anfängliche Controller ist? Bitte sagen Sie mir, wie kann ich Root View Controller kennen? erkläre es und bitte slove mein Problem. –

Antwort

5

Durch die Art und Weise bin wählen, ich weiß, Sie gelöst haben Ihr Problem, aber ich wollte nur einen anderen Flow vorschlagen. Sie könnten alternativ immer mit Ihrer Standard-Ausgangsszene beginnen (was Sie ohne Code im App-Delegaten tun können), aber haben Sie viewWillAppear feststellen, ob Sie die Bedingungen (T & C) benötigen, und wenn ja, präsentieren Sie das separate Szene modal (entweder animiert oder nicht animiert, wie Sie es für richtig halten). Sie können die Bestätigung des Benutzers über die T & C haben, dann die AGB-Szene schließen und Sie werden wieder in der Standard "Initial" -Szene sein.

Wenn Sie es auf diese Weise tun, wird Ihre T & C entlassen werden, Sie müssen nicht programmatisch mit der Änderung die rootViewController spielen, um die Top-Level-Szene der Navigationssteuerung bleibt immer als der Standard „initial“ Szene So Dinge wie popToRootViewController Arbeit ohne jede leichte Hand, müssen Sie nicht die Navigationsleiste auf der T & C-Seite verstecken, etc. Es eignet sich auch für einen Fluss, wo Sie den Benutzer eine Option, die T & zu sehen C wieder (zB begraben auf den "Einstellungen" oder "über" Szenen, wenn Sie einen geeigneten Ort haben, um es zu zeigen).

Und wenn Sie sich fragen, wie programmatisch T & C gehen, könnten Sie einen Übergang von Ihrer ersten Szene in der Szene T & C definieren:

create segue

dann, dass Segue wählen und geben es eine Kennung:

segue identifier

Und nun Ihre erste Szene viewWillAppear konnte performSegueWithIdentifier, wie:

Ich bin froh, dass Sie Ihr Problem gelöst haben, aber ich wollte nur einen alternativen Fluss vorschlagen.

0

Ok Der mögliche Grund ist, dass Sie die Zuweisung des Klassen-/Controllernamens im Identity Inspector zu Ihrem Controller in storyBoard verpasst haben. Als nächstes überprüfen Sie in Ihrer Plist-Datei, dass Sie einen Storyboard-Eintrag mit dem richtigen Namen Ihres Storyboards haben.

Ich hoffe, das funktioniert. :)

4

gelöst Schließlich mein Problem, verwendet ich diesen Code

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]; 
Verwandte Themen