NSUSerdefaults和刷卡ios的应用
Posted
技术标签:
【中文标题】NSUSerdefaults和刷卡ios的应用【英文标题】:NSUSer defaults and swiping the application off ios 【发布时间】:2014-05-01 08:03:59 【问题描述】:全部,
我只是找不到这个问题的答案。 View Controller 的设置只需要在启动时显示一次。因此,当您从 App Store 下载应用程序/试飞时。
我猜对了,所以它先运行它,没关系。 当您完成设置页面后,它会转到主页,当您将应用程序移至后台时,它会从停止的地方继续。没关系..但是...当您通过双击主页按钮并将应用程序向上推以删除(ios7)来滑动应用程序时,它会再次返回设置屏幕,但它应该从停止的地方继续。
所以在我的 App Delegate 中,我有:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
NSString *savedValue = [[NSUserDefaults standardUserDefaults] stringForKey:@"SettingsShown"];
NSLog(@"%@", savedValue);
Reachability *reachability = [Reachability reachabilityWithHostname:@"www.outtonightapp.com"];
[reachability startNotifier];
NSUserDefaults *settingsscreen = [NSUserDefaults standardUserDefaults];
[settingsscreen registerDefaults:[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES],@"firstTime", nil]];
//BOOL firstTime = [settingsscreen boolForKey:@"firstTime"];
BOOL firstTime = [settingsscreen boolForKey:@"SettingsShown"];
if (!firstTime)
//if ( firstTime==YES)
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"SettingsShown"];
[[NSUserDefaults standardUserDefaults] synchronize];
self.window.rootViewController = [self.window.rootViewController.storyboard instantiateViewControllerWithIdentifier:@"SetUpNav"];
else
return YES;
在我不得不重新创建我的设置 VC 之前,这确实有效。任何建议都会很棒。
【问题讨论】:
为什么在 default 用户默认值中使用"firstTime"
并在值中使用 "SettingsShown"
?
Droppy,我放弃了这个......你能建议吗?
好吧,我不确定它是否会有所作为,但请查看您在 registerDefaults
行中使用的键。将其从 "firstTime"
更改为 "SettingsShown"
看看是否有帮助。
看起来你从来没有读过最后的状态......每次你的应用在关闭后重新启动时,都会发生相同的路由
【参考方案1】:
在类似的情况下,我使用了委托模式。
假设您有初始视图控制器 initialVC。特殊设置视图控制器 (SetUpNav) 仅在未设置默认值时才首次运行。然后您可以执行以下操作:
-
您在 SetUpNavViewController.h 中定义 SetUpNavdelegate 协议和符合该协议的属性“initiator”
@protocol SetUpNavDeleagte; @interface SetUpNavViewController : UIViewController @property (strong,nonatomic) id <SetUpNavdelegate> initiator; // the rest @end @protocol SetUpNavdelegate <NSObject> -(void)setupFinished; @end
-
在 InitialVC 的 viewDidLoad 中,您可以:
通过确定“firstTime”BOOL 值检查您的默认设置是否正确
并在代码中触发 setUpNav 控制器
-(void)viewDidLoad
// Check your defaults for consistency
if (firstTime)
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main OR you SB name" bundle:nil];
UIViewController *setUpNavVC = [loginStoryboard instantiateViewControllerWithIdentifier:@"SetUpNav"];
setUpNavVC.initiator = self;
YouAppDelegateClass *appDelegate = [[UIApplication sharedApplication] delegate];
appDelegate.window.rootViewController = setUpVC;
// Here you don't need animation as I assume it is the very first screen
// ... the rest
-(void)setupFinished
// Here You animately restoring your initial vc.
YouAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
appDelegate.window.rootViewController = self; // This line is for device orientation sync
[UIView transitionWithView:appDelegate.window
duration:FINISH_DURATION
options:UIViewAnimationOptionTransitionCrossDissolve | UIViewAnimationOptionCurveEaseInOut
animations:^ appDelegate.window.rootViewController = self;
completion:nil];
// setUpNav controller will be dealloced by ARC
-
在您完成所有默认作业后,在您的 setUpNavViewController 中为您的委托设置通知:
[self.initator setupFinished];
在可能的应用程序中,此设置工作实际上是一个单独的故事板,其中包含自己的工作流程。顺便说一句,使用这种方法,您不仅可以在第一次显示它,而且每当您的应用程序的用户默认设置未正确设置时(例如,如果您使用设置包)。您可以在导航堆栈或弹出窗口(iPad 外壳)中以模态方式显示它。这是一种更通用的方法。
总结:谁开始,谁就结束了。
【讨论】:
以上是关于NSUSerdefaults和刷卡ios的应用的主要内容,如果未能解决你的问题,请参考以下文章
NSUserDefaults 不在 iOS 8 中的应用程序和自定义键盘之间存储值
NSUserDefaults setObject:forKey 死锁?
iOS 8,9 上的 NSUserDefaults 有多安全?