即使应用程序重新打开也保存数据 - Swift Xcode 6 iOS

Posted

技术标签:

【中文标题】即使应用程序重新打开也保存数据 - Swift Xcode 6 iOS【英文标题】:Save data even if the app re-opens - Swift Xcode 6 iOS 【发布时间】:2014-10-24 18:08:26 【问题描述】:

我正在开发一款可以随机选择情侣的应用。只是一件有趣的事情,好吧!?!? :D 但是问题,或者可能不是问题,而是如果我让这件事正常工作会更好的事情。一开始你需要写下所有的名字。这需要一些时间......我应该使用核心日期吗?我真的不知道核心数据是什么,所以我不确定。如果有上帝来找我并编写完整的代码,即使应用程序和手机关闭,我也会很高兴。我在java中做过这个,它在java中是不是很简单?那太好了!

//谢谢,安东

【问题讨论】:

如果您管理大量数据,请使用核心数据,但如果您只是将一些名称存储在数组中,则只需使用 NSUserDefaults。 【参考方案1】:

对于需要使用核心数据的重型复杂数据结构, https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CoreData/Articles/cdTechnologyOverview.html#//apple_ref/doc/uid/TP40009296-SW1

但既然您只想存储一个数组,您应该查看NSUserDefaults。 只要应用程序未被删除,NSUserDefaults 就会存储给定的数据。您很可能希望为此创建某种自定义 DataStorage 类。

@interface DataStorage : NSObject <NSCoding>

@property (nonatomic, strong) NSMutableArray *arrayToStore;

+ (instancetype)sharedInstance;
- (void)save;

@end

上面是 .h 文件。如您所见,它遵循NSCoding 协议。这提供了对允许您对数据进行编码的方法的访问。您将使用 save 方法将数据写入磁盘。

#import "DataStorage.h"

@implementation DataStorage


@synthesize arrayOfPeople = _arrayToStore;

+ (DataStorage *)sharedInstance

    static DataStorage *state = nil;
    if ( !state )
    
        NSData *data =[[NSUserDefaults standardUserDefaults] objectForKey:@"DataStorageKey"];

        if (data)
        
            state = [NSKeyedUnarchiver unarchiveObjectWithData:data];
        
        else
        
            state = [[DataStorage alloc] init];
        
    
    return state;


- (id)init
    if (self = [super init]) 

        if (!_arrayToStore) 
            _arrayToStore = [[NSMutableArray alloc] init];
        

    
    return self;


- (instancetype)initWithCoder:(NSCoder *)decoder

    self = [self init];
    if (self) 


        if ([decoder decodeObjectForKey:@"DataStorageArrayToStore"]) 
            _arrayToStore = [[decoder decodeObjectForKey:@"DataStorageArrayToStore"] mutableCopy];
        



    
    return self;


- (void)encodeWithCoder:(NSCoder *)encoder 
    [encoder encodeObject:_arrayToStore forKey:@"DataStorageArrayToStore"];


- (void)save

    NSData *appStateData = [NSKeyedArchiver archivedDataWithRootObject:self];
    [[NSUserDefaults standardUserDefaults] setObject:appStateData forKey:@"DataStorageKey"];
    [[NSUserDefaults standardUserDefaults] synchronize];




@end

这是 .m 文件,它几乎可以评估是否有一个已保存的类实例,如果没有,它将创建一个。 [DataStorage sharedInstance]...

当您想要存储一些数据时,您只需将类提供给所述文件#import "DataStorage.m,然后使用

NSString *testData = [NSString stringWithFormat: @"Test Data String"];
[[DataStorage sharedInstance].arrayToStore addObject: testData];
[DataStorage sharedInstance] save];

【讨论】:

以上是关于即使应用程序重新打开也保存数据 - Swift Xcode 6 iOS的主要内容,如果未能解决你的问题,请参考以下文章

保存当前 ImageView 状态以关闭和重新打开应用程序

在 kivymd 上重新运行应用程序后如何保存和加载数据

我的 UIswitch 值为零,即使它打开我必须关闭然后重新打开才能设置值

有啥方法可以保存数据,即使在没有钥匙串的情况下在 ios 上重新安装应用程序?

为啥我在 SwiftUI 中重新打开应用程序时没有保存 CoreData?

本地存储数组 (Swift)