即使应用程序重新打开也保存数据 - 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的主要内容,如果未能解决你的问题,请参考以下文章
我的 UIswitch 值为零,即使它打开我必须关闭然后重新打开才能设置值
有啥方法可以保存数据,即使在没有钥匙串的情况下在 ios 上重新安装应用程序?