1

我正在编写一个需要用户登录的 iOS 应用程序。登录需要向 Web 服务发出 JSON 请求,然后将用户详细信息存储在 Core Data 或任何最好的位置。

此外,我需要在主应用程序启动之前出现登录模式,我知道为此我将其称为- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions.

所以,我需要一个简单的登录名、用户名和密码字段,发出请求,然后将生成的 JSON 数据存储到某个地方,也许是核心数据?

我已经搜索了一个登录示例的高低,但它们都非常简陋或没有完全按照我的意愿行事。我正在考虑创建一个 xib 文件然后调用它,但我不确定这一切。

4

2 回答 2

1

只需didFinishLaunchingWithOptions将您的模态推LoginViewController送到导航堆栈即可。如果您使用的是故事板,您可以只创建LoginViewController根视图控制器,或者放置一个 segue,给它一个标识符,然后调用[rootViewController performSegueWithIdentifier:@"YourSegueId" sender:self].

于 2013-04-13T23:02:38.013 回答
1

几天前我也在想同样的问题。
这是我的解决方案:
didFinishLaunchingWithOptions,我调用一个方法检查您的数据库中是否有帐户和密码(核心数据?我只使用用户默认值)。
如果有,请尝试登录,如果登录失败,则显示模态视图。如果成功,请将您的 appdelegate.window.rootviewcontroller 设置为主视图控制器。
如果没有,则显示模态视图。

或者登录失败,blablabla ...

对不起我糟糕的英语。
这是我的代码:

- (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];
    [ZTCAPIClient registerUserInfo];
    return YES;
}

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

    NSString *account = [defaults stringForKey:@"account"];
if(!account) {
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        // load default value
        [self performSelector:@selector(registerDefaultsFromSettingsBundle)];
        dispatch_async(dispatch_get_main_queue(), ^{
            ZTCUserSettingsViewController *userSettingsView = [[ZTCUserSettingsViewController alloc] init];
            UINavigationController *usersSettingsNav = [[UINavigationController alloc] initWithRootViewController:userSettingsView];
            [[[[[UIApplication sharedApplication] delegate] window] rootViewController] presentModalViewController:usersSettingsNav animated:NO];
            [ZTCNotice showSuccessNoticeInView:userSettingsView.view title:[NSString stringWithFormat:@"%@,%@",NSLocalizedString(@"login first time use title", nil),NSLocalizedString(@"login first time use message", nil)]];//TODO
        });
    });
} else {
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        if ([ZTCAPIClient loginWithAccount:[defaults stringForKey:@"account"] Password:[defaults stringForKey:@"password"] BaseURL:[defaults stringForKey:@"url"]]) {
            //DLog(@"Log in SUCCESS");
            dispatch_async(dispatch_get_main_queue(), ^{
                UITableViewController *viewController = [[ZTCTaskListViewController alloc] initWithStyle:UITableViewStylePlain];
                UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:viewController];
                [[[[UIApplication sharedApplication] delegate] window] setRootViewController:nav];
            });
        } else {
            //DLog(@"Log in FAIL");
            dispatch_async(dispatch_get_main_queue(), ^{
                ZTCUserSettingsViewController *userSettingsView = [[ZTCUserSettingsViewController alloc] init];
                UINavigationController *usersSettingsNav = [[UINavigationController alloc] initWithRootViewController:userSettingsView];
                [[[[[UIApplication sharedApplication] delegate] window] rootViewController] presentModalViewController:usersSettingsNav animated:NO];
                [ZTCNotice showErrorNoticeInView:userSettingsView.view title:NSLocalizedString(@"login fail title", nil) message:NSLocalizedString(@"login fail message", nil)];
            });
        }
    });
}
}
于 2013-04-15T01:32:58.817 回答