我正在做一个游戏,当我关闭应用程序(收于多任务管理器),我所有的数据都消失了!所以,我的问题很简单:如何保存数据?如何将数据保存在iOS版
回答
假设你想保存分数和水平,这是一个名为dataHolder对象的属性。
DataHolder可以被创建为一个单,所以你不必过于担心,从那里你访问它(其sharedInstance
实际上):
它的代码看起来有点像这样:
DataHolder.h
#import <Foundation/Foundation.h>
@interface DataHolder : NSObject
+ (DataHolder *)sharedInstance;
@property (assign) int level;
@property (assign) int score;
-(void) saveData;
-(void) loadData;
@end
DataHolder.m
NSString * const kLevel = @"kLevel";
NSString * const kScore = @"kScore";
@implementation DataHolder
- (id) init
{
self = [super init];
if (self)
{
_level = 0;
_score = 0;
}
return self;
}
+ (DataHolder *)sharedInstance
{
static MDataHolder *_sharedInstance = nil;
static dispatch_once_t onceSecurePredicate;
dispatch_once(&onceSecurePredicate,^
{
_sharedInstance = [[self alloc] init];
});
return _sharedInstance;
}
//in this example you are saving data to NSUserDefault's
//you could save it also to a file or to some more complex
//data structure: depends on what you need, really
-(void)saveData
{
[[NSUserDefaults standardUserDefaults]
setObject:[NSNumber numberWithInt:self.score] forKey:kScore];
[[NSUserDefaults standardUserDefaults]
setObject:[NSNumber numberWithInt:self.level] forKey:kLevel];
[[NSUserDefaults standardUserDefaults] synchronize];
}
-(void)loadData
{
if ([[NSUserDefaults standardUserDefaults] objectForKey:kScore])
{
self.score = [(NSNumber *)[[NSUserDefaults standardUserDefaults]
objectForKey:kScore] intValue];
self.level = [(NSNumber *)[[NSUserDefaults standardUserDefaults]
objectForKey:kLevel] intValue];
}
else
{
self.level = 0;
self.score = 0;
}
}
@end
不要忘记#import“DataHolder.h”,你需要它,或者只是把它放在...-Prefix.pch
。
你可以在appDelegate
方法进行实际的加载和保存:
- (void)applicationDidEnterBackground:(UIApplication *)application
{
[[DataHolder sharedInstance] saveData];
}
- (void)applicationWillEnterForeground:(UIApplication *)application
{
[[DataHolder sharedInstance] loadData];
}
您可以从任何地方[DataHolder sharedInstance].score
和[DataHolder sharedInstance].level
访问你的分数和级别的数据。
对于一项简单的任务来说,这看起来可能过于矫枉过正,但它确实有助于保持整洁,并且可以帮助您避免将所有数据保留在appDelegate
(这通常是解决方案的快捷方式)。
可以保存CoreData,SqlLite或NSUserDefaults的数据 更新 境界也是一种选择,很容易实现。
或者一个简单的平面文件,可能包含JSON表示或CSV格式的数据。 –
哪一个是安全的? –
如果你有一些敏感的东西,那么不要将它存储在NSUserDefaults中。尝试保存在其他人,如Realm SQL或核心数据,并使用加密。如果你有像令牌用户名和密码这样的东西,使用钥匙串 –
[NSUserDefaults standardUserDefaults]
是良好的少量如用户设置和偏好数据。通常,您使用此,使用户能够保存定义全局值,如性格喜好,武器偏好,各种数据的什么,等等
对于较大数额般的游戏级别的细节或成就武器库存等数据你会想要使用像核心数据。这是一个更正式的数据库,可以在数据模式更改时轻松迁移。看到文档在这里: Core Data和Core Data Programming Guide
我建议使用Realm更多的通用解决方案。
斯威夫特3
UserDefaults.standard.set(„some value”, „key”)
let value = UserDefaults.standard.string(„key”)
可以使用甚至坚持阵列此
有多种方法将数据保存在iOS中。
- UserDefaults - 保存少量数据的好方法。
- 钥匙串 - 安全的位置,以安全的高敏感数据,如登录数据和密码。
- SQLite数据库 - 如果你的应用有一个巨大的结构化数据
- CoreData的量 - 基于描述应保存
- 保存文件的对象的对象图表 - 当然,你也可以直接保存所有类型的文件到文件系统。但是,由于安全原因,您只能访问应用程序容器内的文件系统。
- 使用Realm数据库 - Core Data和SQLite的最佳替代方案db
- NSKeyedArchiver和NSKeyedUnarchiver - 对于少量对象更好的方法。 //我是这样认为的
- 1. 如何在iOS中保存UIImageView数据
- 2. 在线保存IOS数据
- 3. IOS数据保存
- 4. 如何将数据保存在iOS完成块中
- 5. 如何将数据保存在iphone
- 6. 将数据保存到与iOS
- 7. 如何在iOS设备上持久保存iOS应用数据
- 8. 将数据保存在核心数据(IOS)中时出错
- 9. ios如何将json数据调用保存为文件
- 10. 如何将数据保存到iOS中的解析后端?
- 11. IOS保存标签数据
- 12. 保存/加载IOS数据
- 13. IOS如何保留数据?
- 14. 如何将数据保存在Firebase中已保存的数据之上?
- 15. 将数据保存在C#
- 16. IOS,TableView,NSArray数据源 - 何时保存?
- 17. Django:如何将数据保存到ManyToManyField?
- 18. 如何将Handsontable保存到数据库
- 19. 如何将JSON数据保存到iPhone
- 20. 如何将unicode数据保存到oracle?
- 21. 如何将tableView数据保存到NSUserDefaults?
- 22. 如何将数据保存到coreData
- 23. iOS背景保存在核心数据
- 24. 如何在版本控制下保存元数据?
- 25. 如何使用Angular JS将数据保存在数据库中?
- 26. 如何使用mongoose/mongodb将数据保存在数据库中?
- 27. 如何将缓存数据保存到sqlite数据库(android)
- 28. 将json数据保存到iOS中的sqlite数据库中
- 29. IOS:如何在第一个视图中保存我的数据
- 30. 如何拍照并保存在iOS上的SQLite数据库中
你到底是什么类型的数据,以节省多少呢? –