ऐप लोड होने पर मेरी लॉगिन स्क्रीन दिखाने के लिए, और उपयोगकर्ता लॉग इन करने के बाद, मैंने NSUserDefaults में ऑथ ऑब्जेक्ट जोड़ने का निर्णय लिया है जब उपयोगकर्ता सफलतापूर्वक लॉग इन करता है। जब ऐप लॉन्च किया जाता है कि ऑथ पैरामीटर चेक किया गया है, और व्यू कंट्रोलर तदनुसार सेट किया गया है (यदि उपयोगकर्ता एथ है तो यह एक फीड दिखाएगा, अगर नहीं, तो यह एक लॉगिन स्क्रीन दिखाएगा) बाद के मामले में, मेरे पास ऐप है प्रतिनिधि लॉग इन करने के बाद रूट पर रूट व्यू कंट्रोलर को रीसेट कर देता है। क्या यह खराब अभ्यास है या ऐसा करने का एक बेहतर तरीका है?आईओएस ऐप लोड होने के बाद रूट व्यू कंट्रोलर बदलना।
एप्लिकेशन प्रतिनिधि में:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
IIViewDeckController* deckController = [self generateControllerStack];
self.rightController = deckController.rightController;
self.centerController = deckController.centerController;
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if([[defaults objectForKey:@"auth"] isEqualToNumber:[NSNumber numberWithInt:1]]){
self.window.rootViewController = deckController;
}else{
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"MainStoryboard"
bundle:nil];
UIViewController* vc = [sb instantiateViewControllerWithIdentifier:@"loginViewController"];
self.window.rootViewController = vc;
}
[self.window makeKeyAndVisible];
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackOpaque animated:NO];
return YES;
}
- (void) setRoots
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
IIViewDeckController* deckController = [self generateControllerStack];
self.rightController = deckController.rightController;
self.centerController = deckController.centerController;
self.window.rootViewController = deckController;
[self.window makeKeyAndVisible];
}
लॉगिन दृश्य नियंत्रक में:
- (IBAction)loginClick:(id)sender {
if([_emailField.text length]>0&&[_passField.text length]>0){
NSString *user = _emailField.text;
NSString *pass = _passField.text;
[[API sharedInstance] login:user andPass:pass onCompletion:^(NSDictionary *json){
NSLog(@"%@", json);
if(![json objectForKey:@"error"]){
[API sharedInstance].authorized = 1;
NSNumber *auth = [NSNumber numberWithInt:1];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:auth forKey:@"auth"];
[defaults synchronize];
captureYouAppDelegate *app = [[UIApplication sharedApplication] delegate];
[app setRoots];
}else{
[API sharedInstance].authorized = 0;
}
}];
}else{
if([_emailField.text length]<1){
[_emailField becomeFirstResponder];
}else{
[_passField becomeFirstResponder];
}
}
}
अगर वहाँ एक बेहतर या आसान कर रही तुलना में जिस तरह से मैं सोच रहा हूँ। धन्यवाद!
की मदद से rootviewcontroller का उपयोग करने के लिए कारण है कि आप 'rootViewController' के रूप में एक सरल' UINavigationController' न जोड़ें सद्व्यवहार दिखा रहा हूँ, और तुम सिर्फ नहीं है चरण यदि उपयोगकर्ता पहले से लॉग इन है तो लॉगिन स्क्रीन को नेविगेशन स्टैक में दबाएं।यह आपके वर्तमान समाधान की तुलना में बहुत आसान और अधिक सुरुचिपूर्ण होगा। – holex
@ होलेक्स यदि लॉग इन करने के बाद टैब बार की भी आवश्यकता है, तो UINavigationController जोड़ना एक विकल्प नहीं होगा, है ना? – Donald