点击计数器应用程序 - 退出应用程序时保存计数

时间:2013-04-04 14:01:48

标签: iphone ios objective-c

我有一个简单的点击计数器应用程序,包括一个按钮 - 按下计数和一个显示计数的标签。 我想在退出屏幕/应用程序时保存计数,或者如果按下主页按钮或者应用程序崩溃了。

到目前为止,这是我的代码:

h file:
int counter;

@interface tapcounter : UIViewController {

IBOutlet UILabel *count;
}
-(IBAction)click;

m file:
-(IBAction)click {
counter++;
count.text = [NSString stringWithFormat:@"%d",counter];

关于如何最好地实现这一点的任何想法?我是Xcode的新手,所以将不胜感激任何帮助。感谢。

5 个答案:

答案 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)

您可以使用viewDidUnloadNSUserDefaults

- (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