iOS开发--沙盒
IOS中的沙盒机制(SandBox)是一种安全体系,它规定了应用程序只能在为该应用创建的文件夹内读取文件,不可以访问其他地方的内容。所有的非代码文件都保存在这个地方,比如图片、声音、属性列表和文本文件等。
1.每个应用程序都在自己的沙盒内
2.不能随意跨越自己的沙盒去访问别的应用程序沙盒的内容
3.应用程序向外请求或接收数据都需要经过权限认证
查看模拟器的沙盒文件夹在Mac 电脑上隐藏的。
1、找到资料库,首先切换到 Finder 程序,点击顶部“前往”菜单,按住option键,即可显示“资料库”,点击打开。
2、打开沙盒.
Xcode5.1 资源库—Application Support—iPhone Simulator—7.1—Application—按修改日期排序,最新一个—Documents。
Xcode 6 在Finder上点->前往->前往文件夹,输入/Users/ocq/Library/Developer/CoreSimulator/Devices/3BE436D4-F82B-42A1-A2AE-5244799F9A0F/data/Containers/Data/Application/05ADDB2D-E1CE-465C-AFAE-9E149837F4C7/Documents 前往即可打开目录。
还有一种更方便的方式,给代码打个断点,输入:po NSHomeDirectory() 就会输入路径
将数据存入沙盒有多种方式,我使用的是:
1、存写字符串及字典等:
NSString *doc=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *path=[doc stringByAppendingPathComponent:@"account.plish"];
//responseObject是返回的内容
[responseObject writeToFile:path atomically:YES];
2、存储自定义的信息,使用NSKeyedArchiver:
NSString *doc=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *path=[doc stringByAppendingPathComponent:@"account.archive"];
//esponseObject是返回的内容转为模型
HWAccount *account=[HWAccount accountWithDict:responseObject];
[NSKeyedArchiver archiveRootObject:account toFile:path];
实际使用,存储登陆用户的信息:
1、定义一个用户模型
NJAccountModel.h
//
// NJAccountModel.h
// NJWisdomCard
//
// Created by apple on 15/8/31.
// Copyright (c) 2015年 Weconex. All rights reserved.
// #import <Foundation/Foundation.h> @interface NJAccountModel : NSObject
/** 唯一注册号*/
@property (nonatomic, copy) NSString *custuuid; /** 用户姓名*/
@property (nonatomic, copy) NSString *custname; /** 手机号*/
@property (nonatomic, copy) NSString *mobile; /** 证件号*/
@property (nonatomic, copy) NSString *socialcode; @end
NJAccountModel.m
//
// NJAccountModel.m
// NJWisdomCard
//
// Created by apple on 15/8/31.
// Copyright (c) 2015年 Weconex. All rights reserved.
// #import "NJAccountModel.h" @implementation NJAccountModel
/**
* 当一个对象要归档进沙盒中时,就会调用这个方法
* 目的:在这个方法中说明这个对象的哪些属性要存进沙盒
*/
- (void)encodeWithCoder:(NSCoder *)encoder
{
[encoder encodeObject:self.custname forKey:@"custname"];
[encoder encodeObject:self.custuuid forKey:@"custuuid"];
[encoder encodeObject:self.socialcode forKey:@"socialcode"];
[encoder encodeObject:self.mobile forKey:@"mobile"];
} /**
* 当从沙盒中解档一个对象时(从沙盒中加载一个对象时),就会调用这个方法
* 目的:在这个方法中说明沙盒中的属性该怎么解析(需要取出哪些属性)
*/
- (id)initWithCoder:(NSCoder *)decoder
{
if (self = [super init]) {
self.custname = [decoder decodeObjectForKey:@"custname"];
self.custuuid = [decoder decodeObjectForKey:@"custuuid"];
self.socialcode = [decoder decodeObjectForKey:@"socialcode"];
self.mobile = [decoder decodeObjectForKey:@"mobile"];
}
return self;
}
@end
2.读取沙盒里的用户信息还是挺频繁的,封装成一个工具类,提供存入沙盒和读取沙盒的方法。
NJAccountTool.h
//
// NJAccountTool.h
// NJWisdomCard
//
// Created by apple on 15/8/31.
// Copyright (c) 2015年 Weconex. All rights reserved.
// 处理账号相关的所有操作:存储账号、取出账号 #import <Foundation/Foundation.h>
#import "NJAccountModel.h" @interface NJAccountTool : NSObject /**
* 存储账号信息
*
* @param account 账号模型
*/
+ (void)saveAccount:(NJAccountModel *)accountModel; /**
* 返回账号信息
*
* @return 账号模型(如果账号过期,返回nil)
*/
+ (NJAccountModel *)accountModel;
@end
NJAccountTool.m
//
// NJAccountTool.m
// NJWisdomCard
//
// Created by apple on 15/8/31.
// Copyright (c) 2015年 Weconex. All rights reserved.
//
// 账号的存储路径
#define NJAccountPath [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"account.archive"] #import "NJAccountTool.h" @implementation NJAccountTool /**
* 存储账号信息
*
* @param accountModel 账号模型
*/
+ (void)saveAccount:(NJAccountModel *)accountModel
{
// 自定义对象的存储用NSKeyedArchiver
[NSKeyedArchiver archiveRootObject:accountModel toFile:NJAccountPath];
} /**
* 返回账号信息
*
* @return 账号模型
*/
+ (NJAccountModel *)accountModel
{
// 加载模型
NJAccountModel *accountModel = [NSKeyedUnarchiver unarchiveObjectWithFile:NJAccountPath]; return accountModel;
}
@end
3.接下来,在其它地方调用就很容易了。
引用头文件:
#import "NJAccountTool.h"
存在沙盒:
NJAccountModel *accountModel=[NJAccountModel objectWithKeyValues:responseObject[@"code"]];
// 存储账号信息到沙盒
[NJAccountTool saveAccount:accountModel];
读取沙盒:
NJAccountModel *accountModel=[NJAccountTool accountModel];
iOS开发--沙盒的更多相关文章
- iOS开发 沙盒路径和使用
1.模拟器沙盒目录文件都在个人用户名文件夹下的一个隐藏文件夹里,中文叫资源库,他的目录其实是Library.因为应用是在沙箱(sandbox)中的,在文件读写权限上受到限制,只能在几个目录下读写文件: ...
- iOS开发-沙盒(sandbox)机制
苹果前天发的财报,貌似现在用ios系统的比以前又多了一些,但是大家的iPhone购买的渠道也是五花八门,有的从非正规渠道购买的iPhone里的操作系统已经被越狱过,越狱这个事情和Android的roo ...
- iOS开发--沙盒路径与操作文件
获取应用沙盒根路径: -(void)dirHome{ NSString *dirHome=NSHomeDirectory(); NSLog(@"app_home: %@",dirH ...
- iOS路径沙盒文件管理(转载)
iOS路径沙盒文件管理,看到博主总结的很好,转载过来,原文:http://www.aichengxu.com/view/35264 一.iOS中的沙盒机制 iOS应用程序只能对自己创建的文件系统读取文 ...
- IOS的沙盒机制
ios的沙盒(bandbox)机制:一种安全体系,ios应用程序只能对自己创建的应用程序进行读取文件,这个独立.封闭.安全的空间,就我们说的沙盒.它里面一般存放着你的程序需要的文件,数据持久化的一些文 ...
- 关于ios项目沙盒中的文件和Xcode项目创建的文件
//1.1获取在Xcode项目打开的情况下创建的Plist文件 NSString *path = [[NSBundle mainBundle]pathForResource:@"Profes ...
- 【iOS系列】-iOS查看沙盒文件图文教程(真机+模拟器)
[iOS系列]-iOS查看沙盒文件图文教程(真机+模拟器) 1:模拟器 1.1 方法1: 程序中打印一下的地址,能直接前往沙盒路径. NSString *path = [NSSearchPathFor ...
- iOS之沙盒机制和如何获取沙盒路径
iOS APP可以在自己的沙盒里读写文件,但是,不可以访问其他APP的沙盒.每一个APP都是一个信息孤岛,相互是不可以进行通信的,唯独可以通过URL Scheme.沙盒里面的文件可以是照片.声音文件. ...
- iOS - 沙盒机制(SandBox)和获取沙盒路径
iOSAPP可以在自己的沙盒里读写文件,但是,不可以访问其他APP的沙盒.每一个APP都是一个信息孤岛,相互是不可以进行通信的,唯独可以通过URLScheme.沙盒里面的文件可以是照片.声音文件.文本 ...
随机推荐
- 国内首款 FPGA 云服务器,性能是通用 CPU 服务器 30 倍以上
版权声明:本文由薛梁原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/628340001485134638 来源:腾云阁 ht ...
- 使用SQLite3工具查看sqlite.db文件
http://www.sqlite.org OS X自从10.4后把SQLite这套相当出名的数据库软件,放进了作业系统工具集里.OS X包装的是第三版的SQLite,又称SQLite3.这套软件有几 ...
- [转]F5负载均衡算法及基本原理
原文:Intro to Load Balancing for Developers – The Algorithms 转载:http://blog.gesha.net/archives/205/ p ...
- 让HTML标签、DIV、SPAN拥有focus事件和blur事件,聚焦和失焦
DIV和其他普通标签是不具有onfocus和onblur事件的.INPUT和A标签为什么拥有?而DIV和SPAN等普通标签却没有?有时候我们习惯性用键盘的TAB来移动光标,仔细看你会发现,光标只在IN ...
- freemarker了解
今天主要了解了项目流程,了解了这周要做退款详情迁移,了解了freemarker
- Maven 搭建 SSM框架——Spring+SpringMVC+Mybatis的搭建教程
一:概述 SSM框架在项目开发中经常使用到,相比于SSH框架,它在仅几年的开发中运用的更加广泛. Spring作为一个轻量级的框架,有很多的拓展功能,最主要的我们一般项目使用的就是IOC和AOP.Sp ...
- postgresql----文本搜索类型和检索函数
postgresql提供两种数据类型用于支持全文检索:tsvector类型产生一个文档(以优化全文检索形式)和tsquery类型用于查询检索. tsvector的值是一个无重复的lexemes排序列表 ...
- js 的基础知识
一.弱类型意识 js变量是没有类型的 var a = 1; //a 就是一个变量 不要提什么类型 变量可以赋任何类型的值 类型仅仅是值的性质 与变量无关 Js的基本类型 变量未赋值时,其值为und ...
- 洛谷P2569 股票交易【dp】【单调队列】
题目描述 最近 \text{lxhgww}lxhgww 又迷上了投资股票,通过一段时间的观察和学习,他总结出了股票行情的一些规律. 通过一段时间的观察,\text{lxhgww}lxhgww 预测到了 ...
- JavaScript学习12.1
JavaScript弹窗可以创建3种消息框:警告框.确认框.提示框,可以不带window对象直接使用相应的方法警告框:保护用户可以得到某些信息,当出现警告框后需要用户点击确认按钮之后才能操作windo ...