欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

iOS开发学习周报(五)

程序员文章站 2022-04-11 13:42:04
...

iOS开发学习周报(五)

简介

课程名称 IOS开发实训 任课老师 郑贵锋老师&字节跳动工程师
学号 16340015 专业(方向) 软件工程(计应)
姓名 陈彬彬 Email [email protected]
开始日期 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];

效果:

iOS开发学习周报(五)


Sqlite3的使用

参考

sqlit使用要点之引入libsqlite3.dylib

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

Sqlite3语句简记

步骤:

  1. 引入sqlite3的依赖库

iOS开发学习周报(五)

iOS开发学习周报(五)

  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);
}

实现效果:

iOS开发学习周报(五)


数据库增删改查实现

关键代码:

以修改(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。