1、属性列表
路径:
NSArray * testPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *filePath = [paths objectAtIndex:0];
NSString *fileName = [fileName stringByAppendingPathComponent:@"test.plist"];
写:
NSArray *writtenList = [[NSArray alloc] init];
[writtenList writeToFile:fileName atomically:YES];
读:
[writtenList writeToFile:fileName atomically:YES];
NSArray *readList = [[NSArray alloc] initWithContentsOfFile:fileName];
2、归档
读:
NSData *data = [[NSMutableData alloc] initWithContentsOfFile:fileName];
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
TestObj *tObj = [unarchiver decodeObjectForKey:@"testKey"];
[unarchiver finishDecoding];
写:
//overwrite
- (void)encodeWithCoder:(NSCoder *)aCoder {
}
-(id) initWithCoder:(NSCoder *)aDecoder {
}
NSMutableData *data = [[NSMutableData alloc] init];
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
[archiver encodeObject:tObj forKey:@"testKey"];
[archiver finishEncoding];
[data writeToFile:fileName atomically:YES];
3、数据库sql
//数据库操作
sqlite3 *database;
// const NSString * dbname = @"mydb"
int result;
//打开一个指定路径的现有的数据库,如果没有则会新建一个db库
result = sqlite3_open([myFile UTF8String], &database);
if (result != SQLITE_OK) {
sqlite3_close(database);
}
//创建一个db表
char *errorMsg;
NSString *sql_create_table = @"CREATE TABLE IF NOT EXISTS NONOTABLE 省略~~~~~~~~~~~~~";
int result1 ;
//sqlite_exec用了针对sqlite3运行任何不要返回数据的命令,它用于执行更新,插入和删除。简单来说,这个方法执行的都是一些无需返回数据(虽然我们可能获取一个状态值。)。
result1 = sqlite3_exec(database, [sql_create_table UTF8String], NULL, NULL, &errorMsg);
//检索查询操作
int result2 ;
sqlite3_stmt *statment;
NSString *sql_selected = @"查询语句";
result2 = sqlite3_prepare_v2(database, [sql_selected UTF8String], -1, &statment, nil);
if(result2 == SQLITE_OK){
//单步操作
while (sqlite3_step(statment) == SQLITE_ROW) {
int row = sqlite3_column_int(statment, 0);
char * rpwData = sqlite3_column_text(statment, 1);
}
sqlite3_finalize(statment);
}
//绑定变量,既就是插入操作的一种变种,比如我么那上面提到sqlite_exec可以执行插入操作,插入内容直接是写在sql字窜里,但是考虑到字窜涉及到无效的符号以及会一些严重的注入漏洞(比如以前听过的引号符号)。
NSString *sql_bind = @"insert into foo value(?,?)";
result2 = sqlite3_prepare_v2(database, [sql_selected UTF8String], -1, &statment, nil);
if(result2 == SQLITE_OK){
sqlite3_bind_int(statment, 1, 235);
sqlite3_bind_text(statment, 2, "test", -1, nil);
sqlite3_finalize(statment);
}
if (sqlite3_step(statment) != SQLITE_DONE)
NSLog(@"error");
sqlite3_finalize(statment);
sqlite3_close(database);
4、coreData