2

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

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

h file:
int counter;

@interface tapcounter : UIViewController {

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

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

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

4

5 回答 5

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 都会增加。

于 2013-04-04T14:15:56.827 回答
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
}
于 2013-04-04T14:08:32.337 回答
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;
}
于 2013-04-04T14:11:36.630 回答
1

只需使用NSUserDefaults. 以下是如何实现它:

[[NSUserDefaults standardUserDefaults] setObject:counter forKey:@"count"] //set the value

[[NSUserDefaults standardUserDefaults] objectForKey:@"count"] //get the value

更多关于这里NSUserDefaults的教程的信息。

于 2013-04-04T14:12:59.097 回答
1

使用 iCloud ;) 这有点矫枉过正,但它非常适合学习。

这是一个教程。 http://www.raywenderlich.com/6015/beginning-icloud-in-ios-5-tutorial-part-1

于 2013-04-04T14:15:15.780 回答