iOS中存储的3中方式:

1.NSUserDefaults

注意存储基本对象类型是没有问题的,但是要存储自定义对象,则要将对象内所有的属性(或是需要存储的属性)序列化,实现NSCoding协议序列化。

存:
[[NSUserDefaults standardUserDefaults] setValue:@"yellow" forKey:@"color"]; [[NSUserDefaults standardUserDefaults] synchronize];
取:
NSString *color = [[NSUserDefaults standardUserDefaults] objectForKey:@"color"];

对于存储的是自定义的对象:(示例Contact的序列化)

#import <Foundation/Foundation.h>

@interface Contact : NSObject <NSCoding>

@property (nonatomic,retain) NSString *name;
@property (nonatomic,retain) NSString *phoneNumber; + (id)contactsWithName:(NSString *)aName phoneNumber:(NSString *)aPhoneNumber; @end
#import "Contact.h"

#define kNameKey  @"NameKey"
#define kPhoneNumberKey @"PhoneNumberKey" @implementation Contact - (id)initWithName:(NSString *)aName phoneNumber:(NSString *)aPhoneNumber
{
if (self = [super init])
{
self.name = aName;
self.phoneNumber = aPhoneNumber;
} return self;
} //初始化配套的便利方法 ,静态方法中的self 不代表当前类的对象,代表当前类本身
+ (id)contactsWithName:(NSString *)aName phoneNumber:(NSString *)aPhoneNumber
{
return [[[self alloc] initWithName:aName phoneNumber:aPhoneNumber] autorelease]; } //对象序列化的两个协议方法 //对象序列化的方法,把对象的所有属性编码到本地
- (void)encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeObject:_name forKey:kNameKey];
[aCoder encodeObject:_phoneNumber forKey:kPhoneNumberKey];
} //对象反序列化的方法
- (id)initWithCoder:(NSCoder *)aDecoder
{
if(self = [super init])
{
self.name = [aDecoder decodeObjectForKey:kNameKey];
self.phoneNumber = [aDecoder decodeObjectForKey:kPhoneNumberKey];
} return self;
}

2.沙盒

- (void)viewDidLoad
{
[super viewDidLoad]; NSMutableDictionary *savedDic = [[NSMutableDictionary alloc] initWithContentsOfFile:[self dataFilePath]]; //如果第一次进入,从userdefault中取不到数据,手动创建一个字典
if (!savedDic)
{
self.dic = [NSMutableDictionary dictionaryWithCapacity:];
}
else
{
self.dic = savedDic;
}
//注册一个即将进入后台的通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(saveData) name:UIApplicationWillResignActiveNotification object:nil]; } //返回文件的路径
- (NSString *)dataFilePath
{
//沙盒
//获得沙盒下面Documents文件夹的路径
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSLog(@"paths %@",paths);
NSString *path = [paths objectAtIndex:];
//在documents 路径下,追加一个文件路径
NSString *filePath = [path stringByAppendingPathComponent:@"select.plist"]; return filePath;
} - (void)saveData
{
//字典当中存储的value 必须是 array dictionary Boolean data date nsnumber nsstring
//把一个字典写到文件中,实际上是按照plist 的格式去组织数据的
[_dic writeToFile:[self dataFilePath] atomically:YES];
NSMutableDictionary *savedDic = [[NSMutableDictionary alloc] initWithContentsOfFile:[self dataFilePath]];
}

3.sqlite

 
 
 

iOS存储的三种方式的更多相关文章

  1. Android数据存储的三种方式:SharePreferences , file , SQLite

    (1)SharePreferences: 存入: SharedPreferences setter = this.getSharedPreferences("spfile", 0) ...

  2. k8s 中 nfs作为存储的三种方式

    1.安装nfs服务.直接给命令 yum install nfs-utils vim /etc/exports /data/k8s/ 172.16.1.0/24(sync,rw,no_root_squa ...

  3. iOS 拨打电话三种方式总结

    1,这种方法,拨打完电话回不到原来的应用,会停留在通讯录里,而且是直接拨打,不弹出提示NSMutableString * str=[[NSMutableString alloc] initWithFo ...

  4. iOS 拨打电话三种方式

    ,这种方法,拨打完电话回不到原来的应用,会停留在通讯录里,而且是直接拨打,不弹出提示 NSMutableString * str=[[NSMutableString alloc] initWithFo ...

  5. 三种方式使得iOS应用能够在后台进行数据更新和下载

    三种方式使得iOS程序即使在关闭或崩溃的情况下也能够在后台持续进行一些任务,比如更新程序界面快照,下载文件等.这三个方法分别是 Background Fetch,Remote Notification ...

  6. iOS字体加载三种方式

    静态加载 动态加载 动态下载苹果提供的多种字体 其他 打印出当前所有可用的字体 检查某字体是否已经下载 这是一篇很简短的文章,介绍了 iOS 自定义字体加载的三种方式. 静态加载 这个可以说是最简单最 ...

  7. 【整理】Linux下中文检索引擎coreseek4安装,以及PHP使用sphinx的三种方式(sphinxapi,sphinx的php扩展,SphinxSe作为mysql存储引擎)

          一,软件准备 coreseek4.1 (包含coreseek测试版和mmseg最新版本,以及测试数据包[内置中文分词与搜索.单字切分.mysql数据源.python数据源.RT实时索引等测 ...

  8. iOS --- UIWebView的加载本地数据的三种方式

    UIWebView是IOS内置的浏览器,可以浏览网页,打开文档  html/htm  pdf   docx  txt等格式的文件.  safari浏览器就是通过UIWebView做的. 服务器将MIM ...

  9. iOS拨打电话的三种方式

    iOS拨打电话的三种方式 1,这种方法,拨打完电话回不到原来的应用,会停留在通讯录里,而且是直接拨打,不弹出提示 1 2 var string = "tel:" + "1 ...

随机推荐

  1. MQTT开发笔记之《MQTT Server》

    MQTT SERVER 性能测试报告 : http://w3yyb.sinaapp.com/archives/1601各个MQTT SERVER功能列表: http://blog.lenix.xyz/ ...

  2. 9月11日上午HTML有序列表、无序列表、网页的格式和布局

    样式表 六.列表方块 1.有序列表变无序列表 <ol> <li>张店</li> <li>桓台</li> <li>淄川</l ...

  3. Google 地图 API V3 之 叠加层

    Google官方教程: Google 地图 API V3 使用入门 Google 地图 API V3 针对移动设备进行开发 Google 地图 API V3 之事件 Google 地图 API V3 ...

  4. github提交代码时,报permission denied publickey

    在像github提交代码时,报permission denied publickey. 查找了一下,可能是因为github的key失效了. 按照以下步骤,重新生成key. ssh-keygen 一路默 ...

  5. 在Activity之间传递参数(一)

    准备: 一.创建主界面:activity_main.xml文件中<Button android:text="启动另一个Activity" android:id="@ ...

  6. 微信服务号模板消息接口新增"设置行业"和"添加模板"及细节优化

    微信服务号模板消息可以向用户发送重要的服务通知,如信用卡刷卡通知,商品购买成功通知等.昨日,微信团队发布公告称模板消息新增“设置行业”和“添加模板”接口及细节优化,详细变动如下 模板消息[业务通知]自 ...

  7. ASP.NET Core--基于授权的视图

    翻译如下: 开发人员通常希望基于当前用户身份显示,隐藏或以其他方式修改UI. 您可以通过依赖注入访问MVC视图中的授权服务. 将授权服务注入Razor视图,请使用@inject指令,例如: @inje ...

  8. 【转】Entity Framework技术系列之7:LINQ to Entities

    前言 LINQ(Language Integrated Query,语言集成查询)是一组用于C#和VB.NET语言的扩展,它允许编写C#或者VB.NET代码,以与查询数据库相同的方式操作内存数据. L ...

  9. php实战开发之自我整理(学习笔记)

    PHP没有创建变量的命令,变量会在首次赋值时进行创建. 简单样例 1 <?php $word="My first choice"; $x=5; echo $x; echo & ...

  10. [BZOJ1146][CTSC2008]网络管理Network

    [BZOJ1146][CTSC2008]网络管理Network 试题描述 M公司是一个非常庞大的跨国公司,在许多国家都设有它的下属分支机构或部门.为了让分布在世界各地的N个 部门之间协同工作,公司搭建 ...