ios数据存取

手机应用之所以能够给我们生活工作带来便利,其中之一便是能够随时切换不同的应用。如,在苹果手机上接听电话的同时,察看重要的信息内容。这些应用采用了数据存取的技术。

iOS平台提供了若干数据存取技术,今天来看看。

 

1.沙盒机制。这是Apple在iOS平台提供的存取文件的安全机制。直观的看,一个沙盒是iOS给手机应用分配的特殊目录。从官方提供的API来看,手机应用若要在手机本地做写操作(如保存修改等),则只能在此目录下做写操作:如创建文件,修改文件,缓存文件等。

2.Bundle。从NSBundle的api来看,Bundle是一种压缩的只能读取的文件夹,包含各种图片,文本等资源。

3.编程接口:

  1。plist文件。这是对应于字典类型NSDictionary结构的XML文件。无论里面有哪些数据类型,读写plist文件的第一步就是将内容缓存到一个NSDictionary中,再通过NSDictionary提供的接口执行读写操作。缺点:只支持特定的系统定义的数据类型;改变其中一项内容,需要读取全部内容。

  2。归档/解档。这依赖于NSData/NSMutableData、NSKeyedArchiver/NSKeyedUnArchiver 和 protocol NSCoding的实现。第一步是设计某个需要归档的实体类,使这个类实现protocol NSCoding的方法;第二步,借助NSData/NSMutableData作为缓存,归档时,让NSKeyedArchiver的实例将归档后的数据缓存到NSMutableData,最后写到文件中;解档时,先从文件中读取数据到NSData,然后NSKeyedUnarchiver的实例将NSData设为读取缓存区。若是系统定义的数据类型,即简单对象,直接使用NSKeyedArchiver/NSKeyedUnArchiver就可以,其他两者就不需要显式制定了。若是自定义对象,三者才是必需的。缺点:改变其中一项内容,需要读取全部内容。

  3。Sqlite3。这是轻量级的第三方的SQL数据库,只提供面向C的编程接口。需要导入头文件sqlite3.h和库文件libsqlite3.dylib。

        使用顺序大致,细节比较繁琐:

        1。打开数据库(文件)连接。

        2。执行sql。

        3。关闭数据库连接。

  4。CoreData。会用到以下类

      NSManageObjectModel

      NSManageObjectContext

      NSPersistentStoreCoordinator

      NSPredicate

      NSEntityDescription

      用法:

      1。创建core data model。决定存储的文件,在创建NSPersistentStoreCoordinator时,需要指明。

      2。创建Core Data Stack.我通常采用懒加载的方式创建。可以参考我附加的源码。

        

      3。实现查询,更新,删除等操作,一般会先定位所要操作的记录,这要用到NSFetchRequest, NSEntityDescription。所有的操作都需要通过NSManagedObjectContext来实现,如下面代码所示。

        查询:

 

 

 

NSFetchRequest *request = [[NSFetchRequest alloc] init];

NSEntityDescription* record = [NSEntityDescription entityForName:@"VisitorRecord" inManagedObjectContext:helper.managedObjectContext];

  [request setEntity:record];
  NSError *err;
  NSMutableArray *result = [[helper.managedObjectContext executeFetchRequest:request error:&err] mutableCopy];

       增加

        

VisitorRecord *newRecord = (VisitorRecord*) [NSEntityDescription insertNewObjectForEntityForName:@"VisitorRecord" inManagedObjectContext:helper.managedObjectContext];

       更新,如以上查询到result后,对结果中的记录行进行相应的处理。

for (VisitorRecord *item in result) {
item.record_text = atext;
item.modified_time = [NSDate date];
}
 
if([helper.managedObjectContext save:&err]){
NSLog(@"Records was updated successfully.");
} else {
NSLog(@"Error %@,%@", err, [err userInfo]);
}

       删除,通过以上查询的方式定位record,并发送deleteObject给NSManagedObjectContext.

        [helper.managedObjectContext deleteObject:record];

     4。操作完成后,要保存,才能将改动应用到数据库。

        [helper.managedObjectContext save:&err]

  5。NSData/NSMutableData,主要可以用作内存与文件之间的缓冲区。

     写: [data writeToURL:[self archivePath] atomically:YES];

      读: NSMutableData *data = [[NSMutableData alloc] initWithContentsOfURL:[self archivePath]]

  以上是iOS平台一些存取数据技术的总结。相应的源码可以到我的github仓库查看:https://github.com/wuqingjian2015/DataStoreHelper.git

posted @ 2016-04-08 15:49  Ken_Wu  阅读(249)  评论(0编辑  收藏  举报