OK,今天Himi介绍游戏存储这一块,在Android游戏开发中Himi介绍了好几种保存的方式和形式,那么在iOS中也有几种方式,一般常用的有以下四种形式:
1. NSKeyedArchiver(加密形式)
2. NSUserDefaults
3. Write写入方式
4. SQLite3
这里Himi就不再介绍SQlite数据库了,Android游戏存储中我也介绍过SQLite如何保存数据,但是由于这一块很多童鞋没有接触过数据库相关知识,所以即使讲了也没作用,那么对于数据数据库的童鞋们可以参考其他博文或书籍进行学习;
首先介绍第一种保存方式:NSKeyedArchiver
代码很简单就不多解释了直接上代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
//=================NSKeyedArchiver======================== NSString *saveStr1 = @ "我是" ;
NSString *saveStr2 = @ "数据" ;
NSArray *array = [NSArray arrayWithObjects:saveStr1, saveStr2, nil]; //----Save //这一句是将路径和文件名合成文件完整路径 NSString *Path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; NSString *filename = [Path stringByAppendingPathComponent:@ "saveDatatest" ];
[NSKeyedArchiver archiveRootObject:array toFile:filename]; //用于测试是否已经保存了数据 saveStr1 = @ "hhhhhhiiii" ;
saveStr2 =@ "mmmmmmiiii" ;
//----Load array = [NSKeyedUnarchiver unarchiveObjectWithFile: filename]; saveStr1 = [array objectAtIndex:0]; saveStr2 = [array objectAtIndex:1]; CCLOG(@ "str:%@" ,saveStr1);
CCLOG(@ "astr:%@" ,saveStr2);
|
第二种保存方式:NSUserDefaults
代码很简单就不多解释了直接上代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
//=================NSUserDefaults======================== NSString *saveStr1 = @ "我是" ;
NSString *saveStr2 = @ "数据" ;
NSArray *array = [NSArray arrayWithObjects:saveStr1, saveStr2, nil]; //Save NSUserDefaults *saveDefaults = [NSUserDefaults standardUserDefaults]; [saveDefaults setObject:array forKey:@ "SaveKey" ];
//用于测试是否已经保存了数据 saveStr1 = @ "hhhhhhiiii" ;
saveStr2 =@ "mmmmmmiiii" ;
//---Load array = [saveDefaults objectForKey:@ "SaveKey" ];
saveStr1 = [array objectAtIndex:0]; saveStr2 = [array objectAtIndex:1]; CCLOG(@ "str:%@" ,saveStr1);
CCLOG(@ "astr:%@" ,saveStr2);
|
第三种保存方式:Write写入方式
代码很简单就不多解释了直接上代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
//=================Write写入方式======================== NSString *saveStr1 = @ "我是" ;
NSString *saveStr2 = @ "数据" ;
NSArray *array = [NSArray arrayWithObjects:saveStr1, saveStr2, nil]; //----Save NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; if (!documentsDirectory) {
NSLog(@ "没找到" );
} NSMutableArray *saveDataArray=nil; NSString *appFile = [documentsDirectory stringByAppendingPathComponent:@ "Savedatas.plist" ];
[[NSArray arrayWithObjects:array,nil] writeToFile:appFile atomically:NO]; //用于测试是否已经保存了数据 saveStr1 = @ "hhhhhhiiii" ;
saveStr2 =@ "mmmmmmiiii" ;
//----Load if ([[NSFileManager defaultManager] fileExistsAtPath:appFile]){
saveDataArray = [NSMutableArray arrayWithContentsOfFile:appFile];
} else {
saveDataArray = [NSMutableArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@ "Savedatas" ofType:@ "plist" ]];
} NSArray *strArray = [saveDataArray objectAtIndex:0]; saveStr1 = [strArray objectAtIndex:0]; saveStr2 = [strArray objectAtIndex:1]; CCLOG(@ "str:%@" ,saveStr1);
CCLOG(@ "astr:%@" ,saveStr2);
|
不论哪种形式代码都很容易理解,那么以上三种保存方式代码中都带有如下两行代码;
1
2
|
saveStr1 = @ "hhhhhhiiii" ;
saveStr2 =@ "mmmmmmiiii" ;
|
我已经注释上了,为了验证是否保存数据成功,如果没有保存成功,最后打印的肯定就是hhhhhhiiiiiiiii,mmmmiiiii啦~正常保存的话如下图控制台信息:
由于本章介绍过于简单,那么下面Himi对Write写入方式保存数据和读取数据封装了两个方法这里放出,给童鞋们行个方便:(其他两种大家封装起来风容易了,这里就不写了);
封装的函数如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
//保存游戏数据 //参数介绍: // (NSMutableArray *)data :保存的数据 // (NSString *)fileName :存储的文件名 -( BOOL ) saveGameData:(NSMutableArray *)data saveFileName:(NSString *)fileName
{ NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
if (!documentsDirectory) {
NSLog(@ "Documents directory not found!" );
return NO;
}
NSString *appFile = [documentsDirectory stringByAppendingPathComponent:fileName];
return ([data writeToFile:appFile atomically:YES]);
} //读取游戏数据 //参数介绍: // (NSString *)fileName :需要读取数据的文件名 -(id) loadGameData:(NSString *)fileName { NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *appFile = [documentsDirectory stringByAppendingPathComponent:fileName];
NSMutableArray *myData = [[[NSMutableArray alloc] initWithContentsOfFile:appFile] autorelease];
return myData;
} |
使用代码如下:
1
2
3
4
5
6
|
NSString *saveStr1 = @ "测试保存读取" ;
NSString *saveStr2 = @ "两个函数" ;
NSMutableArray *array = [NSMutableArray arrayWithObjects:saveStr1, saveStr2, nil]; [self saveGameData:array saveFileName:@ "Himi" ];
NSMutableArray*temp =(NSMutableArray*)[self loadGameData:@ "Himi" ];
CCLOG(@ "%@--%@" ,[temp objectAtIndex:0],[temp objectAtIndex:1]);
|
运行效果截图如下:
这里Himi要提醒大家两点细节也是需要注意的地方:
1.对于取出数据的时候需要注意,例如如下代码:
1
2
3
|
NSUserDefaults *saveDefaults = [NSUserDefaults standardUserDefaults]; NSMutableArray *arraySaveData =[saveDefaults objectForKey:@ "OhSaveData" ];
//NSMutableArray *arraySaveData=[NSMutableArray arrayWithArray:[saveDefaults objectForKey:@"OhSaveData"]]; |
第二句代码是通过一个文件名获取你存储的数据,返回数据数组,但是!一定要注意这里返回的数据数组是不可修改的!及时你将读取的数据赋给一个可修改的数组中也一样无法修改其中的数据,所以如果你想将取出的数据进行修改那么这里需要要使用第三行代码来获取,这里Himi将获取出的数据数组首先copy给了可修改数组中,那么此时你的可修改数组就可以正常修改了!
2.修改已经的存储文件;代码如下:
1
2
|
NSUserDefaults *saveDefaults = [NSUserDefaults standardUserDefaults]; [saveDefaults setObject:arraySaveData forKey:@ "已经存在的文件名" ];
|
arraySaveData:表示新的数据数组;
发表评论
-
IOS开发 多线程 一
2013-11-19 11:46 510原文:http://blog.csdn.net/develo ... -
IOS 学习 Key-value coding
2013-11-19 10:56 838原文:http://blog.csdn.net/develo ... -
IOS block dispatch_queue
2012-11-05 15:04 938研究了3天的block使用,今天终于写出了自己的第一个b ... -
socket编程 详解
2012-08-28 08:57 1110对TCP/IP、UDP ... -
iOS ASIHTTPRequest详解 非常强大
2012-08-27 13:20 2449ASIHTTPRequest对CFNetwork API ... -
今天看了ps的简介,决定一定要把它给学会,首先了解一下基础知识
2012-08-22 00:01 7741.位图图像的概念 位图图像使用像素来表示图像,因此也 ... -
SDWebImage使用,图片加载和缓存
2012-07-04 11:44 2439SDWebImage托管在github上。https:/ ... -
coredata 理解
2012-06-15 13:08 1408昨天开始认真的看coredata的用法,今天终于明白的其中的 ... -
#ifndef、#def、#endif说明
2012-06-13 13:43 900你所遇到的这几个 ... -
AVAudioPlayer 音频播放器 使用 教程
2012-06-05 14:33 1249IOS中有三种播放音频的方式:AVAudioPlaye ... -
使用iOS手势UIGestureRecognizer
2012-06-05 10:10 1253UIKit中包含了UIGestureRecognizer ... -
NSAutoReleasePool
2012-05-28 14:40 786好记性不如烂博客. 今天需要记录的是关于NSAutoR ... -
NSLocalizedString 实现国际化
2012-05-28 11:23 864一、获取系统所支持的国际化信息 在国际化之前,你可以在ip ... -
自定义 UIColor baseView 父类子类方法名 不能重复
2012-05-24 11:04 868原来是因为方法名字重复了,因为baseview的方法名和 ... -
Android图片处理(Matrix,ColorMatrix)
2012-05-22 09:24 877在编程中有时候需要 ... -
objectForKey与valueForKey在NSDictionary中的差异
2012-05-18 15:38 814从 NSDictionary 取值的时候有两个方法,ob ... -
symbol(s) not found for architexture i386 路径错误
2012-05-16 09:55 1579昨天这个错误又出现 ... -
symbol(s) not found for architexture i386 报错
2012-05-15 18:40 773我靠啊,今天下午出现了个这个错误,找了好多资料,发现让添加li ... -
symbol(s) not found for architexture i386 报错
2012-05-15 18:40 0我靠啊,今天下午出现了个这个错误,找了好多资料,发现让添加li ... -
推送 证书 联机调试
2012-05-15 15:16 855联机调试出现问题, ...
相关推荐
在这篇文章中使用了`archiveRootObject: toFile:、initForWritingWithMutableData:`和`archivedDataWithRootObject:`三种类型归档方法,它们区别如下: 源码地址:github....
很不错的 ,iOS四种保存数据的方式,1、NSKeyedArchiver 2、NSUserDefaults 3、Write写入方式 4、SQLite。值得一看
本示例"ios中的四种存储方式demo"提供了NSKeyedArchiver、UserDefaults、Write和SQLite这四种常见的数据存储方法的实践代码,具有极高的学习和参考价值。下面我们将详细探讨这四种存储方式。 1. NSKeyedArchiver...
iOS中的偏好设置,通常被称为NSUserDefaults,是一种轻量级的数据存储方式,适用于存储简单的键值对,如用户首选项。你可以通过键值来存储和读取基本数据类型,如字符串、整数、浮点数等。使用`UserDefaults`类可以...
在iOS开发中,`NSUserDefaults` 是一个至关重要的组件,它允许开发者存储用户偏好设置和轻量级数据。这个源码Demo主要展示了如何使用`NSUserDefaults`来读取和写入自定义对象,这对于理解和实践iOS应用的本地数据...
在iOS应用开发中,`NSUserDefaults` 是一个至关重要的组件,它允许开发者存储用户偏好设置或者轻量级的数据。这个压缩包"IOS应用源码——NSUserdefaults(读取和写入自定义对象).zip"包含了一个示例项目,展示了...
首先,`NSUserDefaults` 是苹果提供的一种轻量级的数据持久化方式,它并不适合存储大量的数据,但非常适合用来存储用户的偏好设置或小量的非结构化数据。`NSUserDefaults` 的数据存储是以键值对的形式存在,即通过一...
在iOS开发中,文件管理是应用的基本功能之一,它涉及到数据的存储、读取和更新。本资料包“iOS开发文件相关的操作.zip”提供了一个名为"IOSFileManager-master"的项目,旨在帮助开发者深入理解iOS中的文件操作。在这...
本文将详细介绍五种常见的iOS数据持久化方案:plist文件、偏好设置(Preference)、NSKeyedArchiver(归档)、SQLite 3以及CoreData。 首先,我们来了解一下iOS的沙盒机制。每个iOS应用都有自己的专属空间,称为...
使用几个小例子分别实现 归档NSKeyedArchiver、NSUserDefaults、plist文件数据存储,简单直观,代码地址https://github.com/fancyLi/data-store。
在iOS开发中,数据持久化是将应用程序中的数据保存到设备上以便在用户退出应用或设备重启后仍能访问的关键技术。本篇文章将详细介绍三种主要的数据持久化方法:SQLite(通过FMDB库)、Core Data以及Archiver(序列化...
本文将深入探讨iOS中的几种主要数据存储方式,包括:偏好设置、文件系统、SQLite数据库、Core Data以及归档与解档。 1. **偏好设置(UserDefaults)** 偏好设置,也称为用户默认值,是最简单的数据存储方式,适用...
`NSKeyedArchiver`是苹果提供的一种序列化框架,用于将Objective-C对象编码为字节流,存储到文件中,实现数据持久化。本教程将深入讲解如何使用`NSKeyedArchiver`进行数据的保存与恢复,以及它在处理单个、多个和...
`NSUserDefaults`是iOS提供的一种轻量级的数据存储方式,适用于存储小量数据如用户偏好设置、简单的配置选项等。它使用属性列表(Property Lists)作为底层存储格式,支持数组、字典、字符串、数字、日期和原始数据...
在iOS应用开发中,数据存储是一项至关重要的任务。本文将深入探讨iOS的基础数据存储方法,包括沙盒机制、Plist、Preference(偏好设置)、归档和反归档。理解并熟练掌握这些技术对于构建功能完善的iOS应用至关重要。...
本篇文章将深入探讨iOS应用中的两种主要存储方式:归档(Archiving)和偏好设置(Preference Settings)。这两种方法都是Objective-C语言实现的,并且在实际开发中被广泛使用。 首先,我们来了解一下简单的数据存储方式...
"iOS 存取数据之归档"这一主题主要关注如何使用Objective-C或Swift中的归档技术来持久化存储对象数据。归档是一种将对象转换为字节流,然后可以保存到磁盘上的方法。这允许你在应用关闭后再次打开时恢复这些数据。 ...
以上四种方式各有优缺点,NSKeyedArchiver适用于小量自定义对象,NSUserDefaults适合轻量级数据,文件写入适用于大文件或简单格式数据,而SQLite则适用于结构化和大量数据的存储。选择哪种方式取决于应用的具体需求...