如何在iOS中保存和从持久性中检索变量?

时间:2016-05-23 06:18:22

标签: ios nsstring

每当我调用我的方法 generateTitleString 时,我需要向用户显示一条文字" 视频X ",其中" X "是显示给用户的最后一个视频的编号加1.如果我使用下面的代码,它将始终生成相同的数字,即1。

- (NSString *) generateTitleString
{
    NSString *title = [NSString stringWithFormat:@"Video %d", count+1];
    return title;
}

如何在持久性中保存和检索上次显示的视频的值,以便每次显示" 视频X "文本显示增加的计数?

Thxs。

1 个答案:

答案 0 :(得分:1)

看起来你没有增加变量数量,这就是为什么你总是 "视频1"

更新:您可以创建一个类,您可以在其中保留所有全局变量(例如" 计数")。在此示例中,我将此类命名为 GlobalData 。您还需要使用用户默认值来永久保存某些变量的值。

尝试下一步。

GlobalData.h:

#import <Foundation/Foundation.h>

@interface GlobalData : NSObject

+ (NSInteger) getCount;

+ (void) setCount:(NSInteger)newCount;

@end

GlobalData.m:

#import "GlobalData.h"

#define COUNT_USER_DEFAULT_KEY @"COUNT_USER_DEFAULT_KEY"

@implementation GlobalData

/**
* It returns the number of the last video displayed.
*
* @param 
* @return the number of the last video displayed
*/
+ (NSInteger) getCount
{
    NSInteger count;
    NSString* recoveredValue;

    // init variables
    count = 0;
    recoveredValue = [[NSUserDefaults standardUserDefaults] valueForKey:COUNT_USER_DEFAULT_KEY];

    // If the recovered value is not NIL, we convert it to an integer.
    if (recoveredValue != nil)
        count = [recoveredValue integerValue];

    return count;
}

/**
* It sets the number of the last video displayed with the value of input "newCount".
*
* @param newCount    Number of the last video displayed.
* @return 
*/
+ (void) setCount:(NSInteger)newCount
{
    // Save user info in NSUserDefaults.
    [[NSUserDefaults standardUserDefaults] setValue:[NSString stringWithFormat:@"%li", (long)newCount] forKey:COUNT_USER_DEFAULT_KEY];

    // Writes NSUserDefaults on disk.
    [[NSUserDefaults standardUserDefaults] synchronize];
}

@end

查看控制器:

#import "GlobalData.h"

@implementation

- (void) viewDidLoad
{
     [super viewDidLoad];
}

- (NSString *) generateTitleString
{
    NSString *title;
    NSInteger count;

    // Getting count and increasing it.
    count = [GlobalData getCount];
    count = count + 1;        

    // Creating title by using 'count'.
    title = [NSString stringWithFormat:@"Video %d", count];

    // Updating 'count'
    [GlobalData setCount:count];

    return title;
}

@end