iOS开发学习周报(五)
程序员文章站
2022-04-11 13:42:04
...
iOS开发学习周报(五)
简介
课程名称 | IOS开发实训 | 任课老师 | 郑贵锋老师&字节跳动工程师 |
---|---|---|---|
学号 | 16340015 | 专业(方向) | 软件工程(计应) |
姓名 | 陈彬彬 | [email protected] | |
开始日期 | 2019/04/13 | 完成日期 | 2019/04/18 |
文章目录
本周概括
学习记录:
- 学习UI控件:
UISegmentedControl
- 学习使用
Sqlite3
- 学习Mac终端查看
.sqlite
文件 - 学习 IOS 下的单例模式
工作记录:
- 实现一个简单的数据库使用demo
- 使用单例模式
- 涉及增删改查四个方法
- 使用
UISegmentedControl
切换数据库执行方法
学习记录
[UI控件] UISegmentedControl
参考:
实例:
// 功能选择框
NSArray *selectButtonName = @[@"添加", @"删除", @"更新", @"查看"];
self.tintedSegmentedControl = [[UISegmentedControl alloc] initWithItems:selectButtonName];
[self.tintedSegmentedControl setFrame:CGRectMake(50, 500, self.view.frame.size.width-100, 50)];
self.tintedSegmentedControl.tintColor = [UIColor colorWithRed:0.333 green:0.784 blue:1 alpha:1];
self.tintedSegmentedControl.selectedSegmentIndex = 0;
[self.tintedSegmentedControl addTarget:self action:@selector(selectedSegmentDidChange:) forControlEvents:UIControlEventValueChanged];
[self.view addSubview:self.tintedSegmentedControl];
效果:
Sqlite3的使用
参考:
步骤:
- 引入sqlite3的依赖库
- 在
.h
或者.m
文件内引入sqlite3依赖
#import <sqlite3.h>
- 打开、连接数据库
NSString* doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString* fileName = [doc stringByAppendingPathComponent:@"testdb.sqlite"];
const char* cfileName = fileName.UTF8String;
// 创建、打开、连接数据库
int result = sqlite3_open(cfileName, &mydb);
if(result == SQLITE_OK) {
NSLog(@"成功打开数据库");
} else {
NSLog(@"打开数据库失败");
}
- 创建sqlite语句
- 建表
create table if not exists mytable (id integer, name text not null);
- 插入
insert into mytable (id,name) values (001,'leo');
- 删除
delete from mytable where id = 2;
- 更新
update mytable set id = 5 where name = 'leo';
- 查询
select * from mytable where id = 1 and name = 'leo';
- 执行 sql 语句
// 创建表格students
NSString *sql = @"CREATE TABLE IF NOT EXISTS students (sid text PRIMARY KEY NOT NULL, name text NOT NULL,age integer NOT NULL);";
char *errmsg = NULL;
result = sqlite3_exec(mydb, sql.UTF8String, NULL, NULL, &errmsg);
if(result == SQLITE_OK) {
NSLog(@"创建表格student成功");
} else {
NSLog(@"创表失败---%s----%s---%d", errmsg, __FILE__, __LINE__);
}
Mac 查看 .sqlite文件
参考:
Mac终端查看sqlite3数据库、表数据等(含sqlite可视化工具下载)
使用:
- 在终端执行:
$ sqlite3 mydb.sqlite
-
然后输入
sqlite
语句或者功能语句即可常用的功能语句如下
# 帮助
> .help
# 配置情况
> .show
# 展示数据库内的所有表格
> .tables
# 展示数据是否显示头
> .header on
# 3种数据展示形式
> .mode list
> .mode line
> .mode column
# 退出
> .exit
IOS下的单例模式
参考:
实例:
.h
文件
@interface DBManager : NSObject
+ (DBManager*)getInstance;
@end
.m
文件
#import <Foundation/Foundation.h>
#import "DBManager.h"
@interface DBManager()
@end
@implementation DBManager
+ (DBManager*)getInstance {
static id instance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
instance = [[self alloc] init];
});
return instance;
}
@end
工作记录
项目要求
- 实现一个简单的数据库使用demo
- 使用单例模式
- 涉及增删改查四个方法
- 使用
UISegmentedControl
切换数据库执行方法
demo界面
实现步骤:
-
UI布局:
- 添加三个
UITextField
、一个UIButton
和一个UISegmentedControl
- 设置控件属性
- 去除导航栏
- 添加三个
-
后台响应:
- 根据
UISegmentedControl
选中的选项,点击按钮时调用相应的数据库处理方法
- 根据
参考博客:
关键代码:
UISegmentedControl
功能选择框实现:
// 功能选择框
NSArray *selectButtonName = @[@"添加", @"删除", @"更新", @"查看"];
self.tintedSegmentedControl = [[UISegmentedControl alloc] initWithItems:selectButtonName];
[self.tintedSegmentedControl setFrame:CGRectMake(50, 500, self.view.frame.size.width-100, 50)];
self.tintedSegmentedControl.tintColor = [UIColor colorWithRed:0.333 green:0.784 blue:1 alpha:1];
self.tintedSegmentedControl.selectedSegmentIndex = 0;
[self.tintedSegmentedControl addTarget:self action:@selector(selectedSegmentDidChange:) forControlEvents:UIControlEventValueChanged];
[self.view addSubview:self.tintedSegmentedControl];
数据库单例模式调用:
NSInteger index = self.tintedSegmentedControl.selectedSegmentIndex;
NSString *sid = self.sidTextField.text;
NSString *name = self.nameTextField.text;
int age = self.ageTextField.text.intValue;
if(index == 0) {
[[DBManager getInstance] insert:sid Name:name Age:age];
}else if(index == 1) {
[[DBManager getInstance] delete:sid];
}else if(index == 2) {
[[DBManager getInstance] update:sid Name:name Age:age];
}else {
NSDictionary *dict = [[DBManager getInstance] selectById:sid];
NSLog(@"%@", dict);
}
实现效果:
数据库增删改查实现
关键代码:
以修改(update)和查询(select)为例子:
修改数据库表格:(update)
- (BOOL)update: (NSString *) sid Name:(NSString *)name Age:(int)age{
NSString *sql = [NSString stringWithFormat:@"update students set name='%@',age=%d where sid = '%@'", name, age, sid];
char *errmsg = NULL;
int result = sqlite3_exec(mydb, sql.UTF8String, NULL, NULL, &errmsg);
if(result == SQLITE_OK) {
NSLog(@"更新数据成功");
} else {
NSLog(@"更新数据失败---%s----%s---%d", errmsg, __FILE__, __LINE__);
return false;
}
return true;
}
查询数据库表格:(select)
- (NSDictionary *)selectById: (NSString *)sid {
NSString *sql = [NSString stringWithFormat:@"select * from students where sid = '%@'", sid];
sqlite3_stmt *statement;
int result = sqlite3_prepare_v2(mydb, sql.UTF8String, -1, &statement, nil);
if(result == SQLITE_OK) {
NSLog(@"查询数据成功");
while(sqlite3_step(statement) == SQLITE_ROW) {
NSString *sid = [[NSString alloc] initWithUTF8String:sqlite3_column_text(statement, 0)];
NSString *name = [[NSString alloc] initWithUTF8String:sqlite3_column_text(statement, 1)];
NSNumber *age = [[NSNumber alloc] initWithInt:sqlite3_column_int(statement, 2)];
NSLog(@"%@", sid);
NSLog(@"%@", name);
NSLog(@"%@", age);
NSDictionary *dict = [[NSDictionary alloc] initWithObjects:@[sid, name, age] forKeys:@[@"sid", @"name", @"age"]];
return dict;
}
} else {
NSLog(@"查询数据失败");
return nil;
}
return nil;
}
总结
- 这一周主要是花时间和同个小组的队员讨论了做哪一个项目,该如何做,项目的结构是怎么样的,还有哪些技术和知识点是这个项目所需要我们去拓展和学习的。比如说如何实现数据库访问增删改查,如何进行选择合适的框架进行view 到 view model 的数据绑定,如何实现更精细化的布局,还讨论了是否应该舍弃main.storyboard进行纯代码开发。
- 因此,这一周课后自学的也是关于如何在ios中使用sqlite这个轻量级的数据库,因为安卓中我们使用的是单例模式下的数据库操作,这里也顺带了解了一下IOS下的单例模式,当然在设计页面的时候,也认识了一个新的UI控件——UISegmentedControl。