码迷,mamicode.com
首页 > 其他好文 > 详细

数据存储

时间:2015-12-18 21:11:32      阅读:251      评论:0      收藏:0      [点我收藏+]

标签:

 

 数据存储五种类型
1. 五种类型:(1)plist、(2)preference、(3)归档(NSkeyedArchiver)、(4)SQLite3、(5)Core Data
2. plist只能存储数组和字典,plist本质就是xml文件
3. preference只用来存储应用程序配置,不用来存储数据,一个应用程序只有一个plist文件(以应用程序Bundle identifier命名)来存储偏好设置。
4. 归档(NSkeyedArchiver)
1) 可用来存储自定义的类对象,但也只是存储类的成员变量,跟字典存储很相似,只是归档后的文件不是明文的。
2) 归档的类对象需要遵守NSCoding协议,并实现encodeWithCoder和initWithCoder两个方法。NSString、NSDictionary、NSArray、NSData、NSNumber可直接归档。
3) 利用归档可实现对类对象的深拷贝。
4) 如果对象实现了NSCoding的协议方法,那么该对象数组也可以直接归档和解档。
5. SQLite3关系型数据库不能存储对象,Core Data可以直接存储对象
8.2 沙盒路径获取

//应用程序沙盒主目录获取

NSString *home = NSHomeDirectory();

//应用程序tmp文件夹

NSString *tmp = NSTemporaryDirectory();

//应用程序Documents目录获取

NSString *document = [home stringByAppendingPathComponent:@"Documents"];

NSString *document1 = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];

//获取应用程序Library路径

NSString *library = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject];

//获取应用程序Library/Caches路径

NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];

8.3 plist文件存取

//存储

NSString *document = [home stringByAppendingPathComponent:@"Documents"];

NSString *path = [document stringByAppendingPathComponent:@"aaa.plist"];

NSArray *array = @[@"aaa",@"bbb",@"ccc"];

[array writeToFile:path atomically:YES];

 

path = [tmp stringByAppendingPathComponent:@"bbb.plist"];

NSDictionary *dict = @{@"name":@"zhangct", @"age":@"28"};

[dict writeToFile:path atomically:YES];

 

//读取

NSString *tmp = NSTemporaryDirectory();

NSString *path = [tmp stringByAppendingPathComponent:@"bbb.plist"];

NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:path];

 

NSString *document = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];

path = [document stringByAppendingPathComponent:@"aaa.plist"];

NSArray *array = [NSArray arrayWithContentsOfFile:path];
8.4 偏好设置存取

//存储

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

[defaults setObject:@"zhangct" forKey:@"name"];

[defaults setInteger:35 forKey:@"age"];

[defaults setBool:YES forKey:@"sex"];

[defaults synchronize]; //立刻同步?

 

//读取

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

NSString *name = [defaults valueForKey:@"name"];

NSInteger age = [defaults integerForKey:@"age"];

BOOL sex = [defaults boolForKey:@"sex"];

8.5 自定义类归档解档
1. 遵守NSCoding协议,并实现协议encodeWithCoder和initWithCoder方法

@interface CTPerson : NSObject<NSCoding>

@end

 

@implementation CTPerson

- (void)encodeWithCoder:(NSCoder *)coder

{

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

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

   [coder encodeFloat:self.height forKey:@"height"];

}

 

- (instancetype)initWithCoder:(NSCoder *)coder

{

   if (self = [super init]) {

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

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

       self.height = [coder decodeFloatForKey:@"height"];

   }

   return self;

}

@end

 

2. 如果是子类,则遵守NSCoding协议后,实现协议方法时需要先调用父类实现

@implementation CTStudent

- (void)encodeWithCoder:(NSCoder *)coder

{

   [super encodeWithCoder:coder];

   [coder encodeInteger:self.score forKey:@"score"];

}

 

- (instancetype)initWithCoder:(NSCoder *)coder

{

   if (self = [super initWithCoder:coder]) {

       self.score = [coder decodeIntegerForKey:@"score"];

       

   }

   return self;

}

@end
3. 利用NSKeyedArchiver类归档,利用NSKeyedUnarchiver类解档

#define PATH [NSHomeDirectory() stringByAppendingPathComponent:@"student.arc"];

//归档

NSString *path = PATH;

CTStudent *stu = [[CTStudent alloc] init];

stu.name = @"zhangct";

stu.age = 35;

stu.height = 1.72;

stu.score = 89;

[NSKeyedArchiver archiveRootObject:stu toFile:path];

 

//解档

CTStudent *stu = [[CTStudent alloc] init];

NSString *path = PATH;

stu = [NSKeyedUnarchiver unarchiveObjectWithFile:path];

数据存储

标签:

原文地址:http://www.cnblogs.com/linxiu-0925/p/5058169.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!