【发布时间】:2014-11-17 16:41:20
【问题描述】:
场景是当应用程序第一次加载(控制器 A 加载)时,它会检查 NSDefaultuser 是否存在。如果它不存在,则将其发送到(控制器 B)。在控制器 B 中,用户输入他/她的用户名,然后单击确定。现在,NSDefault 正在保存用户名,它还应该将其重定向回主视图控制器。代码如下:
if([Username.text isEqual: @""]) {
[self showOkAlert:@"Username required"];
}
else if([Password.text isEqual:@""]) {
[self showOkAlert:@"Password required"];
}
else {
//suppose that login was successfully.
[self SaveCredentials];
NSString * storyboardName = @"MainStoryboard";
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:storyboardName bundle: nil];
UIViewController * vc = [storyboard instantiateViewControllerWithIdentifier:@"LatestNews"];
[self presentViewController:vc animated:YES completion:nil];
}
控制器 A:
- (void)LoadCredentials {
//load username
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *username = [defaults objectForKey:@"User"];
if(!username) {
[self showAlert:@"user does not exist"];
[self dismissViewControllerAnimated:YES completion:nil];
NSString * storyboardName = @"MainStoryboard";
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:storyboardName bundle: nil];
UIViewController * vc = [storyboard instantiateViewControllerWithIdentifier:@"Login"];
[self presentViewController:vc animated:YES completion:nil];
}else{
[self showAlert:@"user exists"];
// for testing purposes I want it to reset when user logged in. Just so I know it resets. Later this method will be called from logout button.
[self resetUsernameWhenLogout];
}
}
-(void)resetUsernameWhenLogout {
//reset username when logout
NSDictionary *defaultsDictionary = [[NSUserDefaults standardUserDefaults] dictionaryRepresentation];
for (NSString *key in [defaultsDictionary allKeys]) {
[[NSUserDefaults standardUserDefaults] removeObjectForKey:key];
}
[[NSUserDefaults standardUserDefaults] synchronize];
}
- (void)viewDidLoad
{
[self LoadCredentials];
}
【问题讨论】:
-
线程错误?你能先检查 [NSThread isMainThread] 的值吗?如果它是错误的,那么您正在某处创建一个线程并尝试在非主线程中使用 UIKit 将无法正常工作,或者更糟的是部分工作。 (顺便说一句,在用户默认值中保存密码一点都不好,你应该使用钥匙串,也许用包装器github.com/soffes/sskeychain)
-
无论我尝试什么都不会让我回头。任何想法为什么?
-
我没有保存密码只是用户名。
-
线程 1:断点 3.1 这就是我得到的。这并不是真正的错误,它只是从模拟器中踢回 xcode 并将其显示在屏幕上。
-
控制器A如何“发送给控制器B”?你能告诉我们那个代码吗?
标签: ios objective-c xcode5