2013-09-02 13 views
6

मैं वर्तमान दृश्य नियंत्रक प्रकट होने से पहले एक नए दृश्य नियंत्रक पर जाने की कोशिश कर रहा हूं लेकिन इसे प्राप्त नहीं कर सकता। असल में मेरा ऐप, एक स्प्लैश पेज पर शुरू होता है और जांचता है कि क्या आपके पास सहेजे गए NSUserDefaults हैं और यदि हां यह मुख्य दृश्य नियंत्रक खोलता है। हालांकि, मैं नहीं चाहता कि उपयोगकर्ता पहले से ही उपयोगकर्ता के मुख्य दृश्य को देखने से पहले उस दृश्य को देखना चाहें, यह उपयोगकर्ता के अनुकूल नहीं है। मैं चाहता हूं कि वर्तमान उपयोगकर्ता लॉन्च छवि और फिर मुख्य दृश्य को सीधे देख सके। हालांकि मैं वास्तव में ऐसा नहीं कर सकता। यही वह है जो मैंने किया है जो अवांछित प्रभाव उत्पन्न करता है।वर्तमान दृश्य नियंत्रक प्रकट होने से पहले एक और दृश्य नियंत्रक को मिला

- (void)viewDidAppear:(BOOL)animated { 
[super viewDidAppear:animated]; 
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; NSString *user = [prefs stringForKey:@"userName"]; 

if(user.length>0){ 
    NSLog(@"Going straight to main %s", "Yes"); 
    [self performSegueWithIdentifier:@"startMain" sender:self]; 

    } 
} 

मैं इसे कैसे प्राप्त करूं?

उत्तर

-3

प्राप्त करने के लिए आप क्या चाहते हैं अपने AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 

    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; NSString *user = [prefs stringForKey:@"userName"]; 
    if(user.length>0){ 
     NSLog(@"Going straight to main %s", "Yes"); 
     [self performSegueWithIdentifier:@"startMain" sender:self]; 

    } else { 
     self.window.rootViewController = splashScreenViewController; 
    } 
} 
+1

सहायता आदमी के लिए धन्यवाद। मैं आपका कोड आज़मा रहा हूं और ऐसा प्रतीत नहीं होता है कि एपडिलेगेट विधि को जानता है SegueWithIdentifier। मुझे लगता है कि यह व्यू कंट्रोलर पदानुक्रम के तहत एक विधि है। –

1

में इस कोशिश के लिए, मैं। ई।, पहले दृश्य नियंत्रक को बिल्कुल न देखें, आपको संक्रमण में एनीमेशन को हटाना होगा। एनीमेशन के बिना, उपयोगकर्ता को देखा जाएगा क्योंकि दूसरा व्यू कंट्रोलर पहले प्रस्तुत किया गया था।

आप इसे कई तरीकों से प्राप्त कर सकते हैं। उनमें से एक (यह मानना ​​है कि यह एक मॉडल है), स्टोरीबोर्ड में एक अलग सीगू बना रहा होगा, एक अलग पहचानकर्ता और कोई एनीमेशन नहीं होगा, और अगर आपकी हालत सच है तो इसे कॉल करें।

- (void)viewDidAppear:(BOOL)animated { 

    [super viewDidAppear:animated]; 
    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; NSString *user = [prefs stringForKey:@"userName"]; 

    if(user.length>0){ 
     NSLog(@"Going straight to main %s", "Yes"); 
     [self performSegueWithIdentifier:@"startMain-noAnimation" sender:self]; 
     } 
} 
+0

आप इसे देखने में नहीं कर सकते हैं DidLoad - आपको एक त्रुटि मिल जाएगी कि आप एक व्यू कंट्रोलर पेश करने का प्रयास कर रहे हैं जबकि एक और प्रस्तुति प्रगति पर है। आपको इसे डीडएपियर में छोड़ना होगा, लेकिन आपके जैसा कोई एनीमेशन नहीं था। – rdelmar

+0

यह अजीब है, क्योंकि मेरे पास एक प्रोजेक्ट है जो 'viewDidLoad' के अंदर एक मोडल लॉगिन स्क्रीन प्रस्तुत करता है (' वर्तमान दृश्य नियंत्रक के माध्यम से: एनिमेटेड: समापन: ')। मेरा नियंत्रक एक टैबबार नियंत्रक के अंदर है, मुझे नहीं पता कि इसमें –

+0

कुछ करने के लिए कुछ है या नहीं, क्या आप वाकई इसे डीडलोड में देखते हैं? मैंने अभी इसे एक नियंत्रक पर परीक्षण किया है जो टैब बार नियंत्रक के पहले टैब में है, और मुझे त्रुटि मिली: "चेतावनी: को प्रस्तुत करने का प्रयास जिसका दृश्य विंडो पदानुक्रम में नहीं है ! "। अगर मैं इसे देखने में कोशिश करता हूं तो मुझे वही त्रुटि मिलती है। – rdelmar

0

मैं एक तरह से यह करने के लिए AppDelegate और स्टोरीबोर्ड आईडी का उपयोग कर पता लगा:

वह कुछ इस तरह होगा। मैंने जो किया है वह यहाँ है।

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

    //Check to see if this is a current user or a new user 
    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; NSString *user = [prefs stringForKey:@"userName"]; 

    //Current User 
    if(user.length>0){ 
     self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds]; 

     UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil]; 

     UIViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"2"]; 

     self.window.rootViewController = viewController; 
     [self.window makeKeyAndVisible]; 

    } else { 
     self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds]; 

     UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil]; 

     UIViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"1"]; 

     self.window.rootViewController = viewController; 
     [self.window makeKeyAndVisible]; 
    } 


    return YES; 
} 
संबंधित मुद्दे