–archiver:didEncodeObject:
–archiverDidFinish:
–archiver:willEncodeObject:
–archiverWillFinish:
–archiver:willReplaceObject:withObject:
类和类名
+ setClassName:forClass:
+ classNameForClass:
–setClassName:forClass:
–classNameForClass:
异常
extern NSString *NSInvalidArchiveOperationException;
NSKeyedUnarchiver
创建
–initForReadingWithData:
取消归档
+ (id)unarchiveObjectWithData:(NSData *)data // 从data中得到实现归档的对象
+ (id)unarchiveObjectWithFile:(NSString *)path // 从文件中得到
解码数据
- (BOOL)containsValueForKey:(NSString *)key // 是否包含给定的key编码对象
–decodeBoolForKey:
–decodeBytesForKey:returnedLength:
–decodeDoubleForKey:
–decodeFloatForKey:
–decodeIntForKey:
–decodeInt32ForKey:
–decodeInt64ForKey:
–decodeObjectForKey:
- (void)finishDecoding // 通知委托解码结束,调用后不能再继续解码
代理委托
–delegate
–setDelegate:
–unarchiver:cannotDecodeObjectOfClassName:originalClasses:
–unarchiver:didDecodeObject:
–unarchiver:willReplaceObject:withObject:
Finishing Decoding
–unarchiverDidFinish:
–unarchiverWillFinish:
类名
+ setClass:forClassName:
+ classForClassName:
–setClass:forClassName:
–classForClassName:
异常
NSString *NSInvalidUnarchiveOperationException;
(三).CoreData
xcdatamodeld文件中Entity的三种属性:
Attributes: 对应的Obj-c类的接口变量.
Relationships: Entity之间的关系,to-one,or to-many.
Fetched properties: 对上面Relationship的过滤 参考参考1
对应文件存储形式
COREDATA_EXTERN NSString * const NSSQLiteStoreType NS_AVAILABLE(10_4, 3_0);// SQLite形式存储
COREDATA_EXTERN NSString * const NSXMLStoreType NS_AVAILABLE(10_4, NA);// ios不可用
COREDATA_EXTERN NSString * const NSBinaryStoreType NS_AVAILABLE(10_4, 3_0);// 二进制形式存储
COREDATA_EXTERN NSString * const NSInMemoryStoreType NS_AVAILABLE(10_4, 3_0);// 内存中
基本使用过程(括号中参考sql术语)
NSManagedObjectModel对象 获取工程中xcdatamodeld文件设置的模版(就是你的数据库有哪些表,表中有哪些字段的一种说明)
NSPersistentStoreCoordinator对象 根据上面的模版生成或对应的一个文件(数据库文件,具体的数据文件)
NSManagedObjectContext对象 上面文件的操作的空间,增删改查都通过这里进行
NSEntityDescription对象 得到上面context中的一个表
NSFetchRequest对象 对上面表的一些具体操作,增删改查
- (NSArray *)executeFetchRequest:(NSFetchRequest *)request error:(NSError **)error; 使用这个方法执行上面的request
如果增删改了context,记得保存。结束
过程示例:
NSManagedObjectContext *managedObjectContext = nil;
// 得到模版
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"YOUR_XCDATAMODELD_FILE_NAME" withExtension:@"momd"];
NSManagedObjectModel* managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
// 具体文件,DOCUMENT_DICRECTORY应该是nsurl的..
NSURL *storeURL = [@"DOCUMENT_DICRECTORY" URLByAppendingPathComponent:@"SQLITE.sqlite"];
NSError *error = nil;
NSPersistentStoreCoordinator *coordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:managedObjectModel];
// 使用SQLite存储
if (![coordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {
// 出错
}
else
{
// 得到操作空间
managedObjectContext = [[NSManagedObjectContext alloc] init];
[managedObjectContext setPersistentStoreCoordinator:coordinator];
}
// 得到具体的表
NSEntityDescription *entityDescription = [NSEntityDescription
entityForName:@"ONE_ENTITY_NAME"
inManagedObjectContext:managedObjectContext];
// 操作语句
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity: