Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/120.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS登录模式_Ios_Core Data_Login - Fatal编程技术网

iOS登录模式

iOS登录模式,ios,core-data,login,Ios,Core Data,Login,我正在编写一个iOS应用程序,需要用户登录。登录需要向web服务发出JSON请求,然后将用户详细信息存储在核心数据中或最好的位置 此外,我需要在主应用程序启动之前显示登录模式,我知道为此我在-(BOOL)application:(UIApplication*)应用程序中调用它,并使用options:(NSDictionary*)launchOptions完成启动 所以,我需要一个简单的登录名、用户名和密码字段,发出请求,然后将生成的JSON数据存储到某个地方,也许是核心数据 我已经到处搜索了一个

我正在编写一个iOS应用程序,需要用户登录。登录需要向web服务发出JSON请求,然后将用户详细信息存储在核心数据中或最好的位置

此外,我需要在主应用程序启动之前显示登录模式,我知道为此我在
-(BOOL)application:(UIApplication*)应用程序中调用它,并使用options:(NSDictionary*)launchOptions完成启动

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


我已经到处搜索了一个登录示例,但它们都非常初级,或者没有完全按照我的要求进行操作。我正在考虑创建一个xib文件,然后调用它,但我不确定这一切。

只需使用选项将
登录视图控制器推到导航堆栈即可。如果您使用的是故事板,您可以将您的
LoginViewController
设置为根视图控制器,或者放置一个segue,给它一个标识符,然后只需调用
[rootViewController performsguewithidentifier:@“YourSegueId”sender:self]

我几天前还在想同样的问题。
以下是我的解决方案:
didfishlaunchingwithoptions
中,我调用了一个方法来检查数据库中是否有帐户和密码(核心数据?我只使用userdefault)。
如果有,请尝试登录,如果登录失败,请显示模式视图。如果成功,请将appdelegate.window.rootviewcontroller设置为主viewcontroller
如果没有,则显示模态视图

或者登录失败,等等

对不起,我的英语很差。
这是我的密码:

- (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)];
            });
        }
    });
}
}

太棒了,谢谢你。存储登录数据的最佳实践是什么?很高兴我能提供帮助。总是在钥匙链中存储敏感信息。当然,我不知道钥匙链,我只是想“核心数据”呵呵。谢谢哦,我的第一个最好的答案!也谢谢你@James和任何投反对票的人,请告诉我原因,我只是想像其他人帮助我一样帮助你,你可能想试试框架。它基本上为您提供了登录屏幕所需的结构(和加载屏幕,这有助于您在后台发出JSON请求)