0

これが私の状況です:
私はインターネットを必要とするTaskListViewController(UITableView)を持っています。
そこで、タスクリストが表示される前に、AFNetworkingを使用して(デモアカウントとパスワードを使用して)ログイン作業を行いました。

次に、ユーザーにアカウントとパスワードを設定させる必要があります。
だから私はログインする前にモーダルビュー(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;
}
4

2 に答える 2

1

サンプルコードがモーダルビューコントローラーを提示しようとしている場所がわかりません。おそらくそれはの内部で起こり-[ZTCAPIClient login]ます。

一般的に、モーダルビューコントローラは、表示するビューコントローラのビューがビュー階層に含まれるまで表示できません。あなたの特定の質問については、これはあなたのプログラムがを読む行の後にモーダルを提示する必要があることを意味します[self.window makeKeyAndVisible];。プログラムがモーダルビューコントローラを表示しようとする前に機能しない場合、実際には、デバッグコンソールにログに記録されたエラーメッセージが表示される可能性があります。

ちなみに、でプログラムをやりすぎないように注意する必要があります-application:didFinishLaunchingWithOptions:。プログラムに時間がかかりすぎると、システムがアプリを強制終了する可能性があります。iOSアプリプログラミングガイドには次のように記載されています。

アプリケーション:willFinishLaunchingWithOptions:およびapplication:didFinishLaunchingWithOptions:メソッドは、アプリの起動時間を短縮するために、常に可能な限り軽量にする必要があります。アプリは起動して初期化し、5秒以内にイベントの処理を開始することが期待されています。アプリがタイムリーに起動サイクルを終了しない場合、システムは応答しないためにアプリを強制終了します。したがって、起動を遅くする可能性のあるタスク(ネットワークへのアクセスなど)は、セカンダリスレッドで非同期に実行する必要があります。

フォアグラウンドで起動すると、システムはapplicationDidBecomeActive:メソッドも呼び出して、フォアグラウンドへの移行を終了します。このメソッドは起動時とバックグラウンドからの移行時の両方で呼び出されるため、このメソッドを使用して、2つの移行に共通するタスクを実行します。

于 2013-03-25T02:42:45.507 に答える
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];
    }
}
}
于 2013-03-25T11:56:27.047 に答える