目录
plist属性列表
创建 plist 文件
读写 plist 文件
- (IBAction)write:(id)sender {
NSBundle *b = [NSBundle mainBundle];
NSString *path = [b pathForResource:@"my_config" ofType:@".plist"];
NSMutableDictionary *dic = [[NSMutableDictionary alloc]initWithContentsOfFile:path];
[dic writeToFile:@"/tmp/temp.plist" atomically:YES];
}
- (IBAction)read:(id)sender {
NSBundle *b = [NSBundle mainBundle];
NSString *path = [b pathForResource:@"my_config" ofType:@".plist"];
NSMutableDictionary *dic = [[NSMutableDictionary alloc]initWithContentsOfFile:path];
NSLog(@"dic=%@",dic);
}
NSUserDefaults
NSUserDefaults 简介
- 可以保存一些简单的数据;
- 可以定制应用的行为。
保存、读取数据
- (IBAction)write:(id)sender {
// 1.instance
NSUserDefaults *d = [NSUserDefaults standardUserDefaults];
// 2.setXXX key
[d setBool:YES forKey:@"boolKey"];
[d setInteger:20 forKey:@"intKey"];
[d setFloat:3.14 forKey:@"floatKey"];
[d setObject:@"String Value" forKey:@"strKey"];
// 3.同步到持久状态
[d synchronize];
}
- (IBAction)read:(id)sender {
NSUserDefaults *d = [NSUserDefaults standardUserDefaults];
NSInteger i = [d integerForKey:@"intKet"];
float f = [d floatForKey:@"floatKey"];
BOOL b = [d boolForKey:@"boolKey"];
NSString *s = [d stringForKey:@"strKey"];
NSLog(@"i=%lu,f=%f,b=%d,s=%@",i,f,b,s);
}
应用配置
- 创建配置文件
-
读取配置
- (IBAction)get:(id)sender { NSUserDefaults *d = [NSUserDefaults standardUserDefaults]; BOOL b = [d boolForKey:@"video_preference"]; NSString *s = [d stringForKey:@"name_preference"]; NSLog(@"b=%d,s=%@",b,s); }
SQLite数据库
SQLite 简介
SQLite 是一个开源的嵌入式数据引擎,广泛应用在嵌入式设备操作系统中,例如早期的Symbian、Android、iOS等系统中。可以使用标准的SQL语句进行操作。
使用 SQLite 实现表的增删查改
-
in Build Phases -> Link Binary With Libraries, add “libsqlite3.tbd”.
-
在头文件中导入
#import "sqlite3.h"
-
创建Person类
@property(nonatomic,assign)int pid; @property(nonatomic,copy)NSString *name; @property(nonatomic,copy)NSString *pwd;
-
创建DBUtil工具类
#import <Foundation/Foundation.h> // 导入头文件 #import "sqlite3.h" #import "Person.h" // 定义数据库名称 #define DbName @"test.db" NS_ASSUME_NONNULL_BEGIN @interface DBUtil : NSObject // 获得数据库文件路径方法 -(NSString*)getPath; // 打开数据库 -(sqlite3*)open; // 关闭数据库 -(void)close:(sqlite3*)db; // 创建表 -(void)createTable:(sqlite3*)db; // 插入 -(void)insert:(Person*)per; // 删除 -(void)del:(int)pid; // 更新 -(void)update:(Person*)per; // 查询 -(NSMutableArray*)query; // 根据id查询 -(Person*)findPerson:(int)pid; @end NS_ASSUME_NONNULL_END
#import "DBUtil.h" @implementation DBUtil // 获得数据库文件路径方法 -(NSString*)getPath{ // 获取文件路径 NSArray *docPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *path = [docPaths objectAtIndex:0]; // 创建数据库路径 path = [path stringByAppendingString:DbName]; return path; } // 打开数据库 -(sqlite3*)open{ // 声明数据库 sqlite3 *database; // 获取数据库路径 NSString *path = [self getPath]; // NSLog(@"%@",path); // 打开数据库 NSInteger result = sqlite3_open([path UTF8String], &database);\ if(result == SQLITE_OK){ // 返回数据库 return database; } return nil; } // 关闭数据库 -(void)close:(sqlite3*)db{ if(db != nil){ sqlite3_close(db); } } // 创建表 -(void)createTable:(sqlite3*)db{ // 创建表的sql语句 char *sql = "create table PersonTable (pid integer primary key autoincrement, name text, pwd text)"; // 执行sql语句创建表 int result = sqlite3_exec(db, sql, 0, nil, nil); // 判断是否创建成功 if(result == SQLITE_OK){ NSLog(@"%@",@"create ok."); }else{ NSLog(@"%@",@"create fail."); } } // 插入 -(void)insert:(Person*)per{ // 打开数据库 sqlite3 *db = [self open]; // 插入sql语句 char *sql = "insert into PersonTable(name,pwd)values(?,?)"; // 定义预定义语句 sqlite3_stmt *stmt; // 准备预定义语句 if(sqlite3_prepare_v2(db, sql, -1, &stmt, nil) == SQLITE_OK){ // 绑定数据 sqlite3_bind_text(stmt, 1, "tom", -1, nil); sqlite3_bind_text(stmt, 2, "123", -1, nil); } // 执行预定义语句 if(sqlite3_step(stmt)==SQLITE_DONE){ NSLog(@"%@",@"insert ok."); }else{ NSLog(@"%@",@"insert fail."); } // 释放语句 sqlite3_finalize(stmt); // 关闭数据库 [self close:db]; } // 删除 -(void)del:(int)pid{ // 打开数据库 sqlite3 *db = [self open]; // 插入sql语句 char *sql = "delete form PersonTable where pid = ?"; // 定义预定义语句 sqlite3_stmt *stmt; // 准备预定义语句 if(sqlite3_prepare_v2(db, sql, -1, &stmt, nil) == SQLITE_OK){ // 绑定数据 sqlite3_bind_int(stmt, 1, pid); } // 执行预定义语句 if(sqlite3_step(stmt)==SQLITE_DONE){ NSLog(@"%@",@"delete ok."); }else{ NSLog(@"%@",@"delete fail."); } // 释放语句 sqlite3_finalize(stmt); // 关闭数据库 [self close:db]; } // 更新 -(void)update:(Person*)per{ // 打开数据库 sqlite3 *db = [self open]; // 插入sql语句 char *sql = "update PersonTable set name = ?, pwd = ? where pid = ?"; // 定义预定义语句 sqlite3_stmt *stmt; // 准备预定义语句 if(sqlite3_prepare_v2(db, sql, -1, &stmt, nil) == SQLITE_OK){ // 绑定数据 sqlite3_bind_text(stmt, 1, [[per name] UTF8String], -1, nil); sqlite3_bind_text(stmt, 2, [[per pwd]UTF8String], -1, nil); sqlite3_bind_int(stmt, 3 , [per pid]); } // 执行预定义语句 if(sqlite3_step(stmt)==SQLITE_DONE){ NSLog(@"%@",@"update ok."); }else{ NSLog(@"%@",@"update fail."); } // 释放语句 sqlite3_finalize(stmt); // 关闭数据库 [self close:db]; } // 查询 -(NSMutableArray*)query{ // 打开数据库 sqlite3 *db = [self open]; // 插入sql语句 char *sql = "select * from PersonTable"; // 定义预定义语句 sqlite3_stmt *stmt; // 定义可变数组 NSMutableArray *array = [NSMutableArray arrayWithCapacity:10]; // 准备预定义语句 if(sqlite3_prepare_v2(db, sql, -1, &stmt, nil) == SQLITE_OK){ while (sqlite3_step(stmt) == SQLITE_ROW) { int pid = sqlite3_column_int(stmt, 0); const char *name = (char*)sqlite3_column_text(stmt, 1); char *pwd = (char*)sqlite3_column_text(stmt, 2); Person *person = [[Person alloc]init]; [person setPid:pid]; [person setName:[NSString stringWithUTF8String:name]]; [person setPwd:[NSString stringWithUTF8String:pwd]]; [array addObject:person]; } } // 释放语句 sqlite3_finalize(stmt); // 关闭数据库 [self close:db]; return array; } // 根据id查询 -(Person*)findPerson:(int)pid{ // 打开数据库 sqlite3 *db = [self open]; // 插入sql语句 char *sql = "select * from PersonTable where pid = ?"; // 定义预定义语句 sqlite3_stmt *stmt; // 实例化Person Person *person = [[Person alloc]init]; // 准备预定义语句 if(sqlite3_prepare_v2(db, sql, -1, &stmt, nil) == SQLITE_OK){ sqlite3_bind_int(stmt, 1 , pid); } if(sqlite3_step(stmt) == SQLITE_DONE){ int pid = sqlite3_column_int(stmt, 0); const char *name = (char*)sqlite3_column_text(stmt, 1); char *pwd = (char*)sqlite3_column_text(stmt, 2); [person setPid:pid]; [person setName:[NSString stringWithUTF8String:name]]; [person setPwd:[NSString stringWithUTF8String:pwd]]; }else{ NSLog(@"%@", @"find fail."); } // 释放语句 sqlite3_finalize(stmt); // 关闭数据库 [self close:db]; return person; } @end
-
ViewController
#import <UIKit/UIKit.h> @interface ViewController : UIViewController<UITableViewDelegate,UITableViewDataSource> @end
#import "ViewController.h" #import "DBUtil.h" @interface ViewController () @property(nonatomic,strong) DBUtil *util; @property(nonatomic,strong)NSMutableArray *dataSource; @property(nonatomic,strong)UITableView *tv; @end @implementation ViewController - (IBAction)delete:(id)sender { } - (IBAction)query:(id)sender { NSMutableArray *array = [self.util query]; NSLog(@"count=%lu",array.count); for (Person *person in array) { NSLog(@"%d,%@,%@",person.pid,person.name,person.pwd); } } - (IBAction)update:(id)sender { } - (IBAction)insert:(id)sender { Person *person = [[Person alloc]init]; // person.pid = 1001; person.name = @"tom"; person.pwd = @"123abc"; [self.util insert:person]; self.dataSource = [self.util query]; [self.tv reloadData]; } - (IBAction)creatTable:(id)sender { sqlite3 *db = [self.util open]; [self.util createTable:db]; [self.util close:db]; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ return self.dataSource.count; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cid"]; if(cell == nil){ cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cid"]; } Person *person = [self.dataSource objectAtIndex:indexPath.row]; cell.textLabel.text = [NSString stringWithFormat:@"%d,%@,%@", person.pid,person.name,person.pwd]; return cell; } - (void)viewDidLoad { [super viewDidLoad]; self.util = [[DBUtil alloc]init]; self.tv = [[UITableView alloc]initWithFrame:CGRectMake(10, 200, self.view.frame.size.width-20, self.view.frame.size.height-200)]; [self.view addSubview:self.tv]; self.tv.dataSource = self; self.tv.delegate = self; self.dataSource = [self.util query]; // Do any additional setup after loading the view. } @end
-
效果
-
报错原因
第一次运行时需要先创建表。