0

這是我的情況:
我有一個TaskListViewController(UITableView)需要互聯網。
所以我使用AFNetworking在顯示TaskList之前做一些登錄工作(使用模擬帳戶和密碼)。如何在applicationDidFinishLaunching中顯示ModalViewController?

現在我需要讓用戶設置他們的帳戶和密碼。
所以我只想在登錄前展示模態視圖(ZTCUserSettingsViewController)。

而且我花了很多時間,它仍然不起作用。

有什麼辦法解決這個問題嗎?

謝謝。

ZTCAPIClient : AFHTTPClient 
ZTCTaskListViewController : UITableViewController 

代碼

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    [[AFNetworkActivityIndicatorManager sharedManager] setEnabled:YES]; 
    [ZTCAPIClient login]; 


    UITableViewController *viewController = [[ZTCTaskListViewController alloc] initWithStyle:UITableViewStylePlain]; 
    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:viewController]; 


    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    // Override point for customization after application launch. 
    self.window.backgroundColor = [UIColor whiteColor]; 
    self.window.rootViewController = nav; 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 
+0

您的用戶多長時間輸入一次用戶名和密碼?每次應用程序啓動或僅在他們第一次使用它時? – 2013-03-22 16:09:00

+0

@MikeD只有第一次,我可以檢查有關帳戶的userdefaults。 – Puttin 2013-03-23 01:34:48

回答

1

我沒有看到你的代碼示例試圖呈現模式視圖控制器。也許它發生在-[ZTCAPIClient login]之內。

一般來說,直到呈現視圖控制器的視圖位於視圖層次結構中之後,才能呈現模態視圖控制器。對於您的具體問題,這意味着您的程序需要在顯示[self.window makeKeyAndVisible];的行之後的某個時間顯示模態。如果你的程序之前試圖呈現模式視圖控制器,它實際上不會工作,事實上,你可能會看到一條錯誤消息記錄到調試控制檯。

在附註中,您應該注意不要讓程序在-application:didFinishLaunchingWithOptions:中做得太多。如果你的程序時間過長,系統可能會殺死你的應用程序中的iOS App Programming Guide狀態:

您的應用程序:willFinishLaunchingWithOptions:和 應用中:didFinishLaunchingWithOptions:方法應該始終作爲 輕巧,儘可能減少你的應用程序的啓動時間。預計應用程序 將在不到5秒的時間內啓動並初始化,並開始處理事件 。如果應用程序沒有及時完成 的啓動週期,系統會因爲無響應而殺死它。因此,任何可能減慢啓動速度的任務(例如訪問網絡) 應該在輔助線程上異步執行。

當啓動到前臺時,系統還會調用 applicationDidBecomeActive:方法來完成前臺過渡到 前景。由於此方法在啓動時和從後臺過渡時調用,因此可使用該方法執行 在兩個轉換中共有的任何任務。

+0

我想一些代碼,一旦發現它沒有登錄,它不會運行其餘代碼 – Puttin 2013-03-25 03:10:55

0

這是我最終的解決方案:

推出了:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
[[AFNetworkActivityIndicatorManager sharedManager] setEnabled:YES]; 

UINavigationController *nav = [[UINavigationController alloc] init]; 

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
// Override point for customization after application launch. 
self.window.backgroundColor = [UIColor whiteColor]; 
self.window.rootViewController = nav; 
[self.window makeKeyAndVisible]; 

//important! 
[ZTCAPIClient registerUserInfo]; 

return YES; 
} 
在ZTCAPIClient

。m:

+ (void) registerUserInfo { 
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 

NSString *account = [defaults stringForKey:@"account"]; 
if(!account) { 
    // load default value 
    [self performSelector:@selector(registerDefaultsFromSettingsBundle)]; 
    ZTCUserSettingsViewController *userSettingsView = [[ZTCUserSettingsViewController alloc] init]; 
    UINavigationController *usersSettingsNav = [[UINavigationController alloc] initWithRootViewController:userSettingsView]; 
    [[[[[UIApplication sharedApplication] delegate] window] rootViewController] presentModalViewController:usersSettingsNav animated:NO]; 
} else { 
    DLog(@"**********************"); 
    if ([ZTCAPIClient loginWithAccount:[defaults stringForKey:@"account"] Password:[defaults stringForKey:@"password"] Mode:[defaults stringForKey:@"requestType"] BaseURL:[defaults stringForKey:@"url"]]) { 
     DLog(@"Log in SUCCESS"); 
     UITableViewController *viewController = [[ZTCTaskListViewController alloc] initWithStyle:UITableViewStylePlain]; 
     UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:viewController]; 
     [[[[UIApplication sharedApplication] delegate] window] setRootViewController:nav]; 
    } else { 
     DLog(@"Log in FAIL"); 
     ZTCUserSettingsViewController *userSettingsView = [[ZTCUserSettingsViewController alloc] init]; 
     UINavigationController *usersSettingsNav = [[UINavigationController alloc] initWithRootViewController:userSettingsView]; 
     [[[[[UIApplication sharedApplication] delegate] window] rootViewController] presentModalViewController:usersSettingsNav animated:NO]; 
    } 
} 
} 
相關問題