iOS-Senior1-数据处理(文件读写)

1.Model的数据层的理解

     

1.1沙盒基础

沙盒定义:每个iOS应用程序都会为自己创建一个文件系统目录(文件夹),这个独立,封闭,安全的空间,叫做沙盒。

沙盒特点:

沙盒的文件夹及各个文件夹的作用

 

查找沙盒的两个方式:

1.点击finder -> 前往(左上角)- > 按住alt键  -> 资源库 -> Developer -> CoreSimulator -> (目标文件夹)

2.搜索 -> 终端 -> 命令行:

显示:defaults write com.apple.finder AppleShowAllFiles -bool true
隐藏:defaults write com.apple.finder AppleShowAllFiles -bool false

1.2数据本地化知识点

数据本地化定义以及方式:

2.文件读写(存储)

2.1简单数据类型写入本地(字符串,数组,字典,NSData类型的数据存储在本地)NSString,NSArray(以字符串为例)

运行结果如图所示

2.2(存储NSData类型的数据)读取图片image写入本地

代码如下:

运行结果如图所示:

2.3复杂对象存入本地(Person)

源代码如下:

Person.h文件中:

///姓名

@property (nonatomic,copy) NSString *name;

///性别

@property (nonatomic,copy) NSString *gender;

///年龄

@property (nonatomic,assign) NSInteger age;

Person.m文件中:

//归档:将所有的属性进行归档

- (void)encodeWithCoder:(NSCoder *)aCoder {

[aCoder encodeObject:self.name forKey:@"name"];

[aCoder encodeObject:self.gender forKey:@"gender"];

[aCoder encodeInteger:self.age forKey:@"age"];

}

//解档(反归档)

- (instancetype)initWithCoder:(NSCoder *)aDecoder {

self = [super init];

if (self) {

self.name = [aDecoder decodeObjectForKey:@"name"];

self.gender = [aDecoder decodeObjectForKey:@"gender"];

self.age = [aDecoder decodeIntegerForKey:@"age"];

}

return self;

}

ViewController.m文件中

//如何把一个Person类型的对象存入本地,即为复杂对象的本地化,这个对象必须遵守NSCoding协议,并实现协议中的两个方法

#pragma mark - 复杂对象的本地化

#pragma mark - 归档过程

//1.找寻Documents文件夹的目录

NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];

//2.创建Person对象

Person *person = [[Person alloc]init];

person.name = @"MBBoy";

person.gender = @"boy";

person.age = 18;

//3.把这个对象归档

//3.1创建NSMutableData,用于初始化归档工具的

NSMutableData *data = [NSMutableData data];

NSLog(@"data = %@",data);

//3.2创建归档工具的

NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc]initForWritingWithMutableData:data];

//3.3对要归档的person对象进行归档

[archiver encodeObject:person forKey:@"person"];

//3.4结束归档

[archiver finishEncoding];

NSLog(@"data1 = %@",data);

//4.将归档的内容存储在本地

NSString *personPath = [documentPath stringByAppendingPathComponent:@"person.plist"];

//写入路径

[data writeToFile:personPath atomically:YES];

NSLog(@"personPath = %@",personPath);

#pragma mark - 解档过程

//1.将要解档的数据找出来

NSData *resultData = [NSData dataWithContentsOfFile:personPath];

NSLog(@"resultData = %@",resultData);

//2.创建解档工具

NSKeyedUnarchiver *unArchiver = [[NSKeyedUnarchiver alloc]initForReadingWithData:resultData];

//3.对person对象进行解档[使用一个对象接收,有返回值]

Person *newPerson = [unArchiver decodeObjectForKey:@"person"];

//4.结束解档

[unArchiver finishDecoding];

NSLog(@"name = %@,gender = %@,age = %ld",newPerson.name,newPerson.gender,newPerson.age);

运行结果如图所示:

《下面做个练习题,搞一搞吧~~》

想知道具体步骤???留言!!!

 

 

 

时间: 2024-12-24 10:11:02

iOS-Senior1-数据处理(文件读写)的相关文章

UISenior_数据处理--------文件读写--------

                                          数据存储之沙盒路径   第一种打开应用程序沙盒路径的方式 第一个参数(NSDocumentDirectory)是:枚举值,枚举你具体要查找的文件夹[要进入哪个文件夹直接修改其枚举值即可]   这里的NSDocumentDirectory作用代表进入Documents文件夹,如想进入其它文件夹可对其进行修改 可查看其枚举值的类型  如:进入Caches文件夹  第一个参数改为NSCachesDirectory 第二

iOS笔记之文件读写

最近做的项目中要存储一组图片数据,图片带有name,date等属性,处理办法是讲image图片直接存在沙盒documents文件中,再使用plist文件存储图片属性和image路径. 存入图片: - (void)savePhotos:(NSArray *)photos { NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *plist

IOS-沙盒机制(二 文件读写)

一 目录说明 如下图所示,一个沙盒中典型存在下面的目录和文件 各个目录及文件说明: 1.Documents      您应该将所有的应用程序数据文件写入到这个目录下,这个目录用于存储用户数据或其它应该定期备份的信息. 2.AppName.app   这是应用程序的程序包目录,包含应用程序的本身.由于应用程序必须经过签名,所以您在运行时不能对这个目录中的内容进行修改,否则可能会使应用程序无法启动. 3.Library              这个目录下有两个子目录:Caches 和 Prefer

【iOS】线程安全的文件读写

前段时间看了一遍GCD(Grand Central Dispatch)多线程,GCD是苹果为多核开发提供的解决方案 多线程最常见的问题就是读写,比如数据库读写,文件读写,读取是共享的,写是互斥,允许多个线程进行读操作,当写文件时,阻止队列中所有其他的线程进入,直到文件写完成 本文利用GCD提供的相关API封装(主要有dispatch_barrier_async,dispatch_async,dispatch_queue_create)一个线程安全的文件读写类FileManager 注:这里使用的

flutter 如何实现文件读写(使用篇)

flutter文件读写可以对磁盘文件进行操作,实现某些业务场景,那么我们开始来讲下这个文件读写操作. 使用的库插件(package) dart:io(用于数据处理) path_provider (用于获取路劲) 操作步骤 1.获取正确的本地路径 2.创建指向文件位置的引用 3.写入数据到文件内 4.从文件读取数据 1.获取正确的本地路径  我们获取路劲用的是这个插件 path_provider  可以看到里面提供了两个获取路劲的方式 Example Directory tempDir = awa

文件操作ofstream,open,close,ifstream,fin,按照行来读取数据, fstream,iosin iosout,fio.seekg(),文件写入和文件读写,文件拷贝和文件

 1.ofstream,open,close 写入文件 #include<iostream> #include<fstream> using namespace std; //通过ofstream的方式实现写入文件 open,close void main() { ofstream fout;  //ofstream输出文件 fout.open("E:\\1.txt");//打开文件 fout << "1234abcdef";

DataPersistence(数据持久化: 文件读写, NSUserDefault, 归档)

 DataPersistence(数据持久化) 1.数据持久化?   数据永久的保存 2.为什么要做数据持久化?   要把之前的操作(存档, 记录等)保存起来 3.为什么数据之前保存不了呢?   以前的数据都存在内存中, 程序一旦终止, 内存就会被收回 4.数据保存到哪里, 才能做数据持久化   把数据存到硬盘里 5.存到硬盘的哪个位置呢?   沙盒机制: iOS会为每一个应用, 单独创建一个文件夹(沙盒), 这个文件夹只允许当前应用访问 6.如何通过代码获取路径? 7.沙盒文件夹又分了多个子文

iOS中对文件的操作

转自:http://marshal.easymorse.com/archives/3340 iOS中对文件的操作 因为应用是在沙箱(sandbox)中的,在文件读写权限上受到限制,只能在几个目录下读写文件: Documents:应用中用户数据可以放在这里,iTunes备份和恢复的时候会包括此目录 tmp:存放临时文件,iTunes不会备份和恢复此目录,此目录下文件可能会在应用退出后删除 Library/Caches:存放缓存文件,iTunes不会备份此目录,此目录下文件不会在应用退出删除 在Do

文件读写、游标

文件读写.游标 seekg 函数原型: istream &seekg( off_type offset, ios::seekdir origin ); istream &seekg( pos_type position ); 函数seekg()用于输入流,而且它将又一次设置"get"指针到当前流的从origin偏移offset个字节的位置上,或是置"get"指针在position位置. seekp 函数原型: ostream &seekp(