获取Documents目录
[cpp]
view plain
copy
- NSArray*path=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
- NSString*documentsDirectory=[pathobjectAtIndex:0];
-
- NSString*filename=[documentsDirectorystringByAppendingFormat:@"thefFile.txt"];
获取tmp目录
copy
NSString*tempPath=NSTemporaryDirectory();
- NSString*tempFile=[tempFilestringByAppendingFormat:@"tempFile.txt"];
属性列表序列化
许多应用程序都使用了属性列表,比如使用属性列表来指定程序首选项,只要字典或数组仅包含特定可序列化的对象,就可以将NSDictionary和NSarray实例写入属性列表及从属性列表创建他们。序列化对象已被转换为字节流,以便存储到文件中,或通过网络进行传输。尽管可以让任何对象可序列化,但是只能将某些对象放置到某个集合类(如NSDictionary或NSArray)中,然后使用该集合的writeToFile方法将他们存储到属性列表
如果你打算使用属性列表持久保存程序数据,则可以使用NSArray或NDDirectionary容纳需要持久化的数据,假设你放到NSArray或NSDirectionary的所有对象都是可序列化的对象,则可以通过字典或数组实例调用writeToFile:atnomically:方法来编写属性列表
copy
[myArraywriteToFile:@"/some/file/location/output.plist"atomically:YES];
1、新建single view application
2、打开viewController.xib,添加控件如图
2、修改控制器
copy
#import<UIKit/UIKit.h>
- #definekFilename@"data.plist"
- @interfaceViewController:UIViewController
- {
- IBOutletUITextField*field1;
- IBOutletUITextField*field2;
- IBOutletUITextField*field3;
- IBOutletUITextField*field4;
- }
- @property(nonatomic,retain)UITextField*field1;
- @property(nonatomic,retain)UITextField*field2;
-
- -(NSString*)dataFilePath;
- -(void)applicationWillTerminate:(NSNotification*)notification;
- @end
copy
@implementationViewController
- @synthesizefield1;
- @synthesizefield2;
- @synthesizefield3;
- @synthesizefield4;
- -(NSString*)dataFilePath
- {
- NSArray*path=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,YES);
- return[documentsDirectorystringByAppendingFormat:@"thefFile.txt"];
- void)applicationWillTerminate:(NSNotification*)notifaction
- NSMutableArray*array=[[NSMutableArrayalloc]init];
- [arrayaddObject:field1.text];
- [arrayaddObject:field2.text];
- [arrayaddObject:field3.text];
- [arrayaddObject:field4.text];
- [arraywriteToFile:[selfdataFilePath]atomically:YES];
- [arrayrelease];
- }
- -(void)viewDidLoad
- NSString*filePath=[selfdataFilePath];
- if([[NSFileManagerdefaultManager]fileExistsAtPath:filePath]){
- NSArray*array=[[NSArrayalloc]initWithContentsOfFile:filePath];
- field1.text=[arrayobjectAtIndex:0];
- field2.text=[arrayobjectAtIndex:1];
- field3.text=[arrayobjectAtIndex:2];
- field4.text=[arrayobjectAtIndex:3];
- UIApplication*app=[UIApplicationsharedApplication];
- [[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(applicationWillTerminate:)name:UIApplicationWillTerminateNotificationobject:app];
- [superviewDidLoad];
- void)dealloc{
- [field1release];
- [field2release];
- [field3release];
- [field4release];
- [superdealloc];
- @end
3、重新打开.xib 按下Control的同时,将File's Owner图标拖放到第一个文本字段,选择field1,第二个连接到field2 ......
对象归档
[csharp]
copy
#definekField1Key@"Field1"
- #definekField2Key@"Field2"
- #definekField3Key@"Field3"
- #definekField4Key@"Field4"
-
- #import<UIKit/UIKit.h>
- @interfaceFourLines:NSObject<NSCoding,NSCopying>
- NSString*field1;
- NSString*field2;
- NSString*field3;
- NSString*field4;
copy
@implementationFourLines
- void)encodeWithCoder:(NSCoder*)aCoder
- [aCoderencodeObject:field1forKey:kField1Key];
- [aCoderencodeObject:field2forKey:kField2Key];
- [aCoderencodeObject:field3forKey:kField3Key];
- [aCoderencodeObject:field4forKey:kField4Key];
- -(id)initWithCoder:(NSCoder*)aDecoder
- if(self=[superinit]){
- self.field1=[aDecoderdecodeObjectForKey:kField1Key];
- self.field2=[aDecoderdecodeObjectForKey:kField2Key];
- self.field3=[aDecoderdecodeObjectForKey:kField3Key];
- self.field4=[aDecoderdecodeObjectForKey:kField4Key];
- returnself;
- -(id)copyWithZone:(NSZone*)zone
- FourLines*copy=[[[selfclass]allocWithZone:zone]init];
- field1=[self.field1copy];
- field2=[self.field2copy];
- field3=[self.field3copy];
- field4=[self.field4copy];
- returncopy;
- @end
copy
#definekFilename@"archive"
- #definekDataKey@"Data"
- interfacePersistenceViewController:UIViewController
- IBOutletUITextField*field1;
- IBOutletUITextField*field2;
- IBOutletUITextField*field3;
- IBOutletUITextField*field4;
- -(NSString*)dataFilePath;
- void)applicationWillTerminate:(NSNotification*)notifacation;
- copy
#import"ViewController.h"
- #import"FourLines.h"
- @implementationPersistenceViewController
- return[documentsDirectorystringByAppendingPathComponent:kFilename];
- void)applicationWillTerminate:(NSNotification*)notifacation
- FourLines*fourLines=[[FourLinesalloc]init];
- fourLines.field1=field1.text;
- fourLines.field2=field2.text;
- fourLines.field3=field3.text;
- fourLines.field4=field4.text;
- NSMutableData*data=[[NSMutableDataalloc]init];
- NSKeyedArchiver*archiver=[[NSKeyedArchiveralloc]initForWritingWithMutableData:data];
- [archiverencodeObject:fourLinesforKey:kDataKey];
- [archiverfinishEncoding];
- [datawriteToFile:[selfdataFilePath]atomically:YES];
- [fourLinesrelease];
- [archiverrelease];
- [datarelease];
- NSData*data=[[NSMutableDataalloc]initWithContentsOfFile:[selfdataFilePath]];
- NSKeyedUnarchiver*unarchiver=[[NSKeyedUnarchiveralloc]initForReadingWithData:data];
- FourLines*fourLines=[unarchiverdecodeObjectForKey:kDataKey];
- field1.text=fourLines.field1;
- field2.text=fourLines.field2;
- field3.text=fourLines.field3;
- field4.text=fourLines.field4;
- [unarchiverrelease];
- UIApplication*app=[UIApplicationsharedApplication];
- [[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(applicationWillTerminate:)name:UIApplicationWillTerminateNotificationobject:app];
- [superviewDidLoad];
- void)dealloc{
- [field1release];
- [field2release];
- [field3release];
- [field4release];
- [superdealloc];
- @end
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"
- #definekFilename@"data.sqlite3"
- sqlite3*database;
- copy
for(inti=1;i<=4;i++){
- NSString*fieldName=[[NSStringalloc]initWithFormat:@"field%d",i];
- UITextField*field=[selfvalueForKey:fieldName];
- [fieldNamerelease];
- NSString*update=[[NSStringalloc]initWithFormat:@"insertorreplaceintofields(row,field_data)values(%d,'%@');",i,field.text];
- char*errorMsg;
- if(sqlite3_exec(database,[updateUTF8String],NULL,&errorMsg)!=SQLITE_OK){
- NSAssert(0,@"Errorupdatingtable:%s",errorMsg);
- sqlite3_free(errorMsg);
- sqlite3_close(database);
- if(sqlite3_open([[selfdataFilePath]UTF8String],&database)!=SQLITE_OK){
- NSAssert(0,@"");
- NSString*createSQL=@"createtableifnotexistfields(rowintegerprimarykey,field_datatext);";
- sqlite3_close(database);
- "");
- NSString*query=@"selectrow,field_datafromfieldsorderbyrow";
- sqlite3_stmt*statement;
- if(sqlite3_prepare_v2(database,[queryUTF8String],-1,&statement,nil)==SQLITE_OK){
- while(sqlite3_step(statement)==SQLITE_OK){
- introw=sqlite3_column_int(statement,0);
- char*rowData=(char*)sqlite3_column_text(statement,1);
- NSString*fieldValue=[[NSStringalloc]initWithUTF8String:rowData];
- UITextField*field=[selfvalueForKey:fieldName];
- field.text=fieldValue;
- [fieldValuerelease];
- sqlite3_finalize(statement);
- @end
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|