基本数据持久性

前端之家收集整理的这篇文章主要介绍了基本数据持久性前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

获取Documents目录

  1. NSArray*path=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);@H_403_19@
  2. NSString*documentsDirectory=[pathobjectAtIndex:0];@H_403_19@
  3. @H_403_19@
  4. NSString*filename=[documentsDirectorystringByAppendingFormat:@"thefFile.txt"];@H_403_19@

获取tmp目录

copy
    NSString*tempPath=NSTemporaryDirectory();@H_403_19@
  1. NSString*tempFile=[tempFilestringByAppendingFormat:@"tempFile.txt"];@H_403_19@

属性列表序列化

许多应用程序都使用了属性列表,比如使用属性列表来指定程序首选项,只要字典或数组仅包含特定可序列化的对象,就可以将NSDictionary和NSarray实例写入属性列表及从属性列表创建他们。序列化对象已被转换为字节流,以便存储到文件中,或通过网络进行传输。尽管可以让任何对象可序列化,但是只能将某些对象放置到某个集合类(如NSDictionary或NSArray)中,然后使用该集合的writeToFile方法将他们存储到属性列表

如果你打算使用属性列表持久保存程序数据,则可以使用NSArray或NDDirectionary容纳需要持久化的数据,假设你放到NSArray或NSDirectionary的所有对象都是可序列化的对象,则可以通过字典或数组实例调用writeToFile:atnomically:方法来编写属性列表

copy
    [myArraywriteToFile:@"/some/file/location/output.plist"atomically:YES];@H_403_19@

1、新建single view application

2、打开viewController.xib,添加控件如图


2、修改控制器

copy
    #import<UIKit/UIKit.h>@H_403_19@
  1. #definekFilename@"data.plist"@H_403_19@
  2. @interfaceViewController:UIViewController@H_403_19@
  3. {@H_403_19@
  4. IBOutletUITextField*field1;@H_403_19@
  5. IBOutletUITextField*field2;@H_403_19@
  6. IBOutletUITextField*field3;@H_403_19@
  7. IBOutletUITextField*field4;@H_403_19@
  8. }@H_403_19@
  9. @property(nonatomic,retain)UITextField*field1;@H_403_19@
  10. @property(nonatomic,retain)UITextField*field2;@H_403_19@
  11. 403_19@
  12. 403_19@
  13. @H_403_19@
  14. -(NSString*)dataFilePath;@H_403_19@
  15. -(void)applicationWillTerminate:(NSNotification*)notification;@H_403_19@
  16. @end@H_403_19@

copy
    @implementationViewController@H_403_19@
  1. @synthesizefield1;@H_403_19@
  2. @synthesizefield2;@H_403_19@
  3. @synthesizefield3;@H_403_19@
  4. @synthesizefield4;@H_403_19@
  5. -(NSString*)dataFilePath@H_403_19@
  6. {@H_403_19@
  7. NSArray*path=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,YES);@H_403_19@
  8. return[documentsDirectorystringByAppendingFormat:@"thefFile.txt"];@H_403_19@
  9. void)applicationWillTerminate:(NSNotification*)notifaction@H_403_19@
  10. NSMutableArray*array=[[NSMutableArrayalloc]init];@H_403_19@
  11. [arrayaddObject:field1.text];@H_403_19@
  12. [arrayaddObject:field2.text];@H_403_19@
  13. [arrayaddObject:field3.text];@H_403_19@
  14. [arrayaddObject:field4.text];@H_403_19@
  15. [arraywriteToFile:[selfdataFilePath]atomically:YES];@H_403_19@
  16. [arrayrelease];@H_403_19@
  17. }@H_403_19@
  18. -(void)viewDidLoad@H_403_19@
  19. NSString*filePath=[selfdataFilePath];@H_403_19@
  20. if([[NSFileManagerdefaultManager]fileExistsAtPath:filePath]){@H_403_19@
  21. NSArray*array=[[NSArrayalloc]initWithContentsOfFile:filePath];@H_403_19@
  22. field1.text=[arrayobjectAtIndex:0];@H_403_19@
  23. field2.text=[arrayobjectAtIndex:1];@H_403_19@
  24. field3.text=[arrayobjectAtIndex:2];@H_403_19@
  25. field4.text=[arrayobjectAtIndex:3];@H_403_19@
  26. UIApplication*app=[UIApplicationsharedApplication];@H_403_19@
  27. [[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(applicationWillTerminate:)name:UIApplicationWillTerminateNotificationobject:app];@H_403_19@
  28. [superviewDidLoad];@H_403_19@
  29. void)dealloc{@H_403_19@
  30. [field1release];@H_403_19@
  31. [field2release];@H_403_19@
  32. [field3release];@H_403_19@
  33. [field4release];@H_403_19@
  34. [superdealloc];@H_403_19@
  35. @end@H_403_19@

3、重新打开.xib 按下Control的同时,将File's Owner图标拖放到第一个文本字段,选择field1,第二个连接到field2 ......

对象归档

[csharp] copy
    #definekField1Key@"Field1"@H_403_19@
  1. #definekField2Key@"Field2"@H_403_19@
  2. #definekField3Key@"Field3"@H_403_19@
  3. #definekField4Key@"Field4"@H_403_19@
  4. @H_403_19@
  5. #import<UIKit/UIKit.h>@H_403_19@
  6. @interfaceFourLines:NSObject<NSCoding,NSCopying>@H_403_19@
  7. NSString*field1;@H_403_19@
  8. NSString*field2;@H_403_19@
  9. NSString*field3;@H_403_19@
  10. NSString*field4;@H_403_19@
  11. 403_19@
  12. 403_19@
  13. 403_19@
  14. 403_19@

copy
    @implementationFourLines@H_403_19@
  1. void)encodeWithCoder:(NSCoder*)aCoder@H_403_19@
  2. [aCoderencodeObject:field1forKey:kField1Key];@H_403_19@
  3. [aCoderencodeObject:field2forKey:kField2Key];@H_403_19@
  4. [aCoderencodeObject:field3forKey:kField3Key];@H_403_19@
  5. [aCoderencodeObject:field4forKey:kField4Key];@H_403_19@
  6. -(id)initWithCoder:(NSCoder*)aDecoder@H_403_19@
  7. if(self=[superinit]){@H_403_19@
  8. self.field1=[aDecoderdecodeObjectForKey:kField1Key];@H_403_19@
  9. self.field2=[aDecoderdecodeObjectForKey:kField2Key];@H_403_19@
  10. self.field3=[aDecoderdecodeObjectForKey:kField3Key];@H_403_19@
  11. self.field4=[aDecoderdecodeObjectForKey:kField4Key];@H_403_19@
  12. returnself;@H_403_19@
  13. -(id)copyWithZone:(NSZone*)zone@H_403_19@
  14. FourLines*copy=[[[selfclass]allocWithZone:zone]init];@H_403_19@
  15. field1=[self.field1copy];@H_403_19@
  16. field2=[self.field2copy];@H_403_19@
  17. field3=[self.field3copy];@H_403_19@
  18. field4=[self.field4copy];@H_403_19@
  19. returncopy;@H_403_19@
  20. @end@H_403_19@

copy
    #definekFilename@"archive"@H_403_19@
  1. #definekDataKey@"Data"@H_403_19@
  2. interfacePersistenceViewController:UIViewController@H_403_19@
  3. IBOutletUITextField*field1;@H_403_19@
  4. IBOutletUITextField*field2;@H_403_19@
  5. IBOutletUITextField*field3;@H_403_19@
  6. IBOutletUITextField*field4;@H_403_19@
  7. 403_19@
  8. 403_19@
  9. 403_19@
  10. 403_19@
  11. -(NSString*)dataFilePath;@H_403_19@
  12. void)applicationWillTerminate:(NSNotification*)notifacation;@H_403_19@
  13. copy
      #import"ViewController.h"@H_403_19@
    1. #import"FourLines.h"@H_403_19@
    2. @implementationPersistenceViewController@H_403_19@
    3. return[documentsDirectorystringByAppendingPathComponent:kFilename];@H_403_19@
    4. void)applicationWillTerminate:(NSNotification*)notifacation@H_403_19@
    5. FourLines*fourLines=[[FourLinesalloc]init];@H_403_19@
    6. fourLines.field1=field1.text;@H_403_19@
    7. fourLines.field2=field2.text;@H_403_19@
    8. fourLines.field3=field3.text;@H_403_19@
    9. fourLines.field4=field4.text;@H_403_19@
    10. NSMutableData*data=[[NSMutableDataalloc]init];@H_403_19@
    11. NSKeyedArchiver*archiver=[[NSKeyedArchiveralloc]initForWritingWithMutableData:data];@H_403_19@
    12. [archiverencodeObject:fourLinesforKey:kDataKey];@H_403_19@
    13. [archiverfinishEncoding];@H_403_19@
    14. [datawriteToFile:[selfdataFilePath]atomically:YES];@H_403_19@
    15. [fourLinesrelease];@H_403_19@
    16. [archiverrelease];@H_403_19@
    17. [datarelease];@H_403_19@
    18. NSData*data=[[NSMutableDataalloc]initWithContentsOfFile:[selfdataFilePath]];@H_403_19@
    19. NSKeyedUnarchiver*unarchiver=[[NSKeyedUnarchiveralloc]initForReadingWithData:data];@H_403_19@
    20. FourLines*fourLines=[unarchiverdecodeObjectForKey:kDataKey];@H_403_19@
    21. field1.text=fourLines.field1;@H_403_19@
    22. field2.text=fourLines.field2;@H_403_19@
    23. field3.text=fourLines.field3;@H_403_19@
    24. field4.text=fourLines.field4;@H_403_19@
    25. [unarchiverrelease];@H_403_19@
    26. UIApplication*app=[UIApplicationsharedApplication];@H_403_19@
    27. [[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(applicationWillTerminate:)name:UIApplicationWillTerminateNotificationobject:app];@H_403_19@
    28. [superviewDidLoad];@H_403_19@
    29. void)dealloc{@H_403_19@
    30. [field1release];@H_403_19@
    31. [field2release];@H_403_19@
    32. [field3release];@H_403_19@
    33. [field4release];@H_403_19@
    34. [superdealloc];@H_403_19@
    35. @end@H_403_19@

    sqlite3

    打开数据库

    sqlite3 *database;

    int result = sqlite3_open("/path/to/database/file",&database);

    如果result等于sqlITE_OK,则表示数据库已经成功打开。sqlite3是采用可以移植的C,所有它不知道什么是NSString,所幸,,有一个NSString方法,该方法从NSString实例生成C字符串

    char *cStringPath = [pathString UTF8String];

    关闭数据库

    sqlite3_close(database)

    创建表


    查询


    结果集


    copy
      #import"/usr/include/sqlite3.h"@H_403_19@
    1. #definekFilename@"data.sqlite3"@H_403_19@
    2. sqlite3*database;@H_403_19@
    3. copy
        for(inti=1;i<=4;i++){@H_403_19@
      1. NSString*fieldName=[[NSStringalloc]initWithFormat:@"field%d",i];@H_403_19@
      2. UITextField*field=[selfvalueForKey:fieldName];@H_403_19@
      3. [fieldNamerelease];@H_403_19@
      4. NSString*update=[[NSStringalloc]initWithFormat:@"insertorreplaceintofields(row,field_data)values(%d,'%@');",i,field.text];@H_403_19@
      5. char*errorMsg;@H_403_19@
      6. if(sqlite3_exec(database,[updateUTF8String],NULL,&errorMsg)!=sqlITE_OK){@H_403_19@
      7. NSAssert(0,@"Errorupdatingtable:%s",errorMsg);@H_403_19@
      8. sqlite3_free(errorMsg);@H_403_19@
      9. sqlite3_close(database);@H_403_19@
      10. if(sqlite3_open([[selfdataFilePath]UTF8String],&database)!=sqlITE_OK){@H_403_19@
      11. NSAssert(0,@"");@H_403_19@
      12. NSString*createsql=@"createtableifnotexistfields(rowintegerprimarykey,field_datatext);";@H_403_19@
      13. sqlUTF8String],&errorMsg)!=sqlITE_OK){@H_403_19@
      14. sqlite3_close(database);@H_403_19@
      15. "");@H_403_19@
      16. NSString*query=@"selectrow,field_datafromfieldsorderbyrow";@H_403_19@
      17. sqlite3_stmt*statement;@H_403_19@
      18. if(sqlite3_prepare_v2(database,[queryUTF8String],-1,&statement,nil)==sqlITE_OK){@H_403_19@
      19. while(sqlite3_step(statement)==sqlITE_OK){@H_403_19@
      20. introw=sqlite3_column_int(statement,0);@H_403_19@
      21. char*rowData=(char*)sqlite3_column_text(statement,1);@H_403_19@
      22. 403_19@
      23. NSString*fieldValue=[[NSStringalloc]initWithUTF8String:rowData];@H_403_19@
      24. UITextField*field=[selfvalueForKey:fieldName];@H_403_19@
      25. field.text=fieldValue;@H_403_19@
      26. [fieldValuerelease];@H_403_19@
      27. sqlite3_finalize(statement);@H_403_19@
      28. @end @H_403_19@

      猜你在找的Sqlite相关文章