我有一个简单的点击计数器应用程序,包括一个按钮 - 按下计数和一个显示计数的标签。 我想在退出屏幕/应用程序时保存计数,或者如果按下主页按钮或者应用程序崩溃了。
到目前为止,这是我的代码:
h file:
int counter;
@interface tapcounter : UIViewController {
IBOutlet UILabel *count;
}
-(IBAction)click;
m file:
-(IBAction)click {
counter++;
count.text = [NSString stringWithFormat:@"%d",counter];
关于如何最好地实现这一点的任何想法?我是Xcode的新手,所以将不胜感激任何帮助。感谢。
答案 0 :(得分:2)
您可以使用NSUserDefaults永久存储内容
NSUserDefaults *userDefaults=[NSUserDefaults standardUserDefaults];
[userDefaults setObject:Any object you want forKey:any Key you want];
[userDefaults synchronize];
当应用程序关闭或崩溃时,您可以通过添加通知来捕获它:
在viewDidLoad中添加此内容
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(saveCount) name:UIApplicationDidEnterBackgroundNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(saveCount) name:UIApplicationWillTerminateNotification object:nil];
在saveCount方法中执行保存部分
-(void)saveCount
{
NSUserDefaults *userDefaults=[NSUserDefaults standardUserDefaults];
[userDefaults setObject:[NSString stringWithFormat:@"%d",counter] forKey:@"saveCount"];
[userDefaults synchronize];
}
如果要再次读取变量,请使用此 - 可能在ViewDidLoad
中NSUserDefaults *userDefaults=[NSUserDefaults standardUserDefaults];
NSString *countString= [userDefaults objectForKey:@"saveCount"];
NSLog(@"Your Count: %@",count);
//checking if data in user defaults is not empty
if(countString.length>0)
{
count.text=count;
counter=[countString intValue];
}
else
{
//for first time
counter=0;
count.text=@"0";
}
假设每次按下按钮时,yourlocalCountVariable都会递增。
答案 1 :(得分:1)
到目前为止,最简单的方法是NSUserDefaults
。试试这个来保存:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setInteger:count forKey:@"count"];
[defaults synchronize];
要检索它,请使用:
if (![[NSUserDefaults standardUserDefaults] valueForKey:@"count"]) {
NSInteger count = [NSUserDefaults integerForKey:@"count"];
//use the value here
}
答案 2 :(得分:1)
您可以使用viewDidUnload
和NSUserDefaults
:
- (void)viewDidUnload
{
[[NSUserDefaults standardUserDefaults] setObject:count forKey:@"tapCount"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
除了视频控制器中的上述内容之外,您还需要在AppDelegate中进行一些设置:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// initialize defaults
NSString *dateKey = @"dateKey";
NSDate *lastRead = (NSDate *)[[NSUserDefaults standardUserDefaults] objectForKey:dateKey];
if (lastRead == nil) // App first run: set up user defaults.
{
NSDictionary *appDefaults = [NSDictionary dictionaryWithObjectsAndKeys:[NSDate date], dateKey, nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:appDefaults];
[[NSUserDefaults standardUserDefaults] synchronize];
}
[[NSUserDefaults standardUserDefaults] setObject:[NSDate date] forKey:dateKey];
tapcounter *tapViewController = [[tapcounter alloc] init];
if ([window respondsToSelector:@selector(setRootViewController:)]) {
window.rootViewController = tapViewController;
} else {
[window addSubview:tapViewController.view];
}
[window addSubview:tapViewController.view];
[window makeKeyAndVisible];
return YES;
}
答案 3 :(得分:1)
只需使用NSUserDefaults
即可。以下是如何实现它:
[[NSUserDefaults standardUserDefaults] setObject:counter forKey:@"count"] //set the value
[[NSUserDefaults standardUserDefaults] objectForKey:@"count"] //get the value
有关NSUserDefaults
教程here的更多信息。
答案 4 :(得分:1)
使用iCloud;)它太过分了,但它非常适合学习。
这是一个教程。 http://www.raywenderlich.com/6015/beginning-icloud-in-ios-5-tutorial-part-1