iOS开发学习周报(五)

本文是iOS开发学习周报第五期,主要内容包括:UISegmentedControl的使用,SQLite3数据库的增删改查操作,Mac上查看.sqlite文件的方法,以及iOS中的单例模式应用。通过一个简单的数据库使用demo,展示了如何在iOS中实现数据库操作,并介绍了如何根据UISegmentedControl的选择执行相应数据库操作。
摘要由CSDN通过智能技术生成

iOS开发学习周报(五)

简介

课程名称IOS开发实训任课老师郑贵锋老师&字节跳动工程师
学号16340015专业(方向)软件工程(计应)
姓名陈彬彬Email944131226@qq.com
开始日期2019/04/13完成日期2019/04/18


本周概括

学习记录:

  • 学习UI控件: UISegmentedControl
  • 学习使用 Sqlite3
  • 学习Mac终端查看 .sqlite 文件
  • 学习 IOS 下的单例模式

工作记录:

  • 实现一个简单的数据库使用demo
    • 使用单例模式
    • 涉及增删改查四个方法
    • 使用 UISegmentedControl 切换数据库执行方法

学习记录

[UI控件] 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];

效果:

pic


Sqlite3的使用

参考

sqlit使用要点之引入libsqlite3.dylib

数据库sqlite3的使用-ios中引用方法

Sqlite3语句简记

步骤:

  1. 引入sqlite3的依赖库

pic

pic

  1. .h 或者 .m 文件内引入sqlite3依赖
#import <sqlite3.h>
  1. 打开、连接数据库
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(@"打开数据库失败");
}
  1. 创建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';
  1. 执行 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可视化工具下载)

使用:

  1. 在终端执行:
$ sqlite3 mydb.sqlite
  1. 然后输入 sqlite 语句或者功能语句即可

    常用的功能语句如下

# 帮助
> .help
# 配置情况
> .show
# 展示数据库内的所有表格
> .tables  
# 展示数据是否显示头
> .header on 
# 3种数据展示形式
> .mode list
> .mode line 
> .mode column
# 退出
> .exit

IOS下的单例模式

参考:

iOS 单例模式 or NSUserDefaults

实例:

.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界面

实现步骤:

  1. UI布局:

    • 添加三个 UITextField 、一个 UIButton 和一个UISegmentedControl
    • 设置控件属性
    • 去除导航栏
  2. 后台响应:

    • 根据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);
}

实现效果:

pic


数据库增删改查实现

关键代码:

以修改(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。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值