iOS开发--经验

简介

这里主要是记录我在实际项目开发中遇到的问题和部分解决方案,与大家分享.

一.iOS项目中的中文字符查找

1.打开”Find Navigator",并且将搜索方式切换搜索模式到 “Find > Regular Expression”,如下图
选择查找方式.png
2.输入查找信息
OC输入:@"[^"]*[\u4E00-\u9FA5]+[^"\n]*?" 
Swift输入:@"[^"]*[\u4E00-\u9FA5]+[^"\n]*?"
查找内容.png

效果展示如上图查到的结果一样.

备注,在参考网络上的解决方案,发现可以根据正则表达来解决这个事情,但是,由于本人对正则方案不是很了解,下面贴出解决方案,大家有兴趣的可以参考参考:

如果你跟我一样嫌NSLocalizedString的comment碍事 也可以用正则替换掉
Find NSLocalizedString\((@"[^\)]*?")\s*,\s*@"[^\)]*"\s*\)
Replace With NSLocalizedString\($1, nil\)

二.评论的坑:屏幕的多点触控导致的UIButton和UITextField均相应

说明:这是我在开发中,点击cell可以对评论进行回复或者举报,采用苹果原声的UIActionSheet触发事件,评论区域采用自定义View,添加UITextField.在非正常操作中,比如长按cell,这时候再点击UITextField,此时UITextField是可以相应键盘弹起来的,但是,再松开长按cell的点击的手,此时cell的触发事件也会相应,这样必然是不对的.
下面是错误视频:


错误设定.gif
直接上解决方案:

思路:采取NSTimeInterval记录按下和抬起两个事件触发的时间,并通过这个差值考虑触发事件.
规定:考虑到人性主义和人体工学,选择0.5s时间差为有效触发事件

1.创建实例变量,记录两中不同的点击触发事件的时间
  //保存长按的时间差
    NSTimeInterval  _timeInterVal1;
    NSTimeInterval  _timeInterVal2;
2.给UIButton添加两种触发状态
// 点击
[_reverBtn addTarget:self action:@selector(onReverBtnTapStart:) forControlEvents:UIControlEventTouchDown];
// 离开
[_reverBtn addTarget:self action:@selector(onReverBtnTapFinish:) forControlEvents:UIControlEventTouchUpInside];
3.再开始点击的触发事件的方法,记录开始电机的时间:
-(void)onReverBtnTapStart:(UIButton *)sender {
    _timeInterVal1 = [[NSDate date] timeIntervalSince1970];
}
4.在结束点击的触发事件的方法中,记录结束点击的时间,并根据这个时间差进行事件的处理方法:
-(void)onReverBtnTapFinish:(UIButton *)sender {
    _timeInterVal2 = [[NSDate date] timeIntervalSince1970];
    if(_timeInterVal2 - _timeInterVal1 < 0.5)
    {
        if ([_delegate respondsToSelector:@selector(commentCell:didTapRevertComment:)]) {
            [_delegate commentCell:self didTapRevertComment:_comment];
        }
    }
    else if(_timeInterVal2-_timeInterVal1>3.0)
    {
        return;
    }
}

三.数据库的升级(FMDB)

实在不知道开头怎么写,先这样吧.
数据库升级,对本地数据保存有着不可或缺的重要性,虽然移动开发针对的更多是功能性和展示性的东西,但是为了增加用户体验,会获取到一些数据保存起来,比如首页的信息缓存等等,数据库的使用就不在多说了,要是不明白或者不了解,可以看看关于数据库方面的东西.
为了方面使用,采用了FMDB,这是个比较好的封装的数据库第三方.
不多说直接上代码:

1.创建静态数据库队列
static FMDatabaseQueue *_queue;
2.创建版本号

版本号为了方便启动,建议以整形的数据进行保存

NSString * const currentHPCacheToolVerson = @"2";
3.在initialize方法中创建数据库的基本信息

这里面主要是根据FMDatabase中的userVerson进行版本的判断,初始化版本的时候,默认是0,这里就方便了第一次安装和老用户,因为在当前存在数据库版本升级的版本之前,都是0,这里我们把0作为初始版本,即初始化创建的表和相关的字段.

+ (void)initialize { 
    NSString *path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"homeData.sqlite"];
    _queue = [FMDatabaseQueue databaseQueueWithPath:path];
    [_queue inDatabase:^(FMDatabase *db) {
        if (db.userVersion == 0) {
            [db executeUpdate:@"create table if not exists t_homeGroup        (id integer primary key autoincrement, homeGroup      blob);"];
            [db executeUpdate:@"create table if not exists t_videoInfos       (id integer primary key autoincrement, videoInfo      blob)"];
            [db executeUpdate:@"create table if not exists t_homeGroupDetial  (id integer primary key autoincrement, groupId        text, homeGroupDetial blob);"];
            
            [db executeUpdate:@"create table if not exists t_paintComics      (id integer primary key autoincrement, paintComic     blob, creatTime text, userId text);"];
            [db executeUpdate:@"create table if not exists t_dynamics         (id integer primary key autoincrement, dynamics       blob, creatTime text, userId text);"];
            [db executeUpdate:@"create table if not exists t_discoverTopics   (id integer primary key autoincrement, discoverTopics blob, creatTime text, userId text);"];
        // 这里需要注意的是,在创建完成之后,需要讲创建后的版本设定为1,这里是考虑到老用户和新用户的问题
            [db setUserVersion:1];
        }
           // 在的设定完初始版本后,进行数据哭的判断更新
            [self updateSQL];
    }];
}
4.版本更新,这里也是作重要的一个部分

这里做的是匹配版本号,根据当前版本号与预期版本号进行对比,并将版本号对应的更新写入到swich中,如果当前更新完成后,版本号与预期版本号相等,则break,如果不相等(小于),则继续升级.当然,有很多朋友更喜欢写成递归的形式,考虑到理解性方面,我还是采用swich方式给大家讲解吧.

- (void)updateSQL {
    if (db.userVersion < [currentHPCacheToolVerson integerValue]) {
                // 更新数据库
                [self updateDBWithOldDBVerson:db.userVersion db:db];
    }
}

+ (void)updateDBWithOldDBVerson:(int32_t)verson db:(FMDatabase *)db {
    switch (verson) {
        case 1: {
            // DO 添加数据库中表的字段
            [db executeStatements:[NSString stringWithFormat: @"ALTER TABLE t_homeGroup       ADD creatTime text"]];
            [db executeStatements:[NSString stringWithFormat: @"ALTER TABLE t_homeGroup       ADD userId text"]];
            
            [db executeStatements:[NSString stringWithFormat: @"ALTER TABLE t_videoInfos      ADD creatTime text"]];
            [db executeStatements:[NSString stringWithFormat: @"ALTER TABLE t_videoInfos      ADD userId text"]];
            
            [db executeStatements:[NSString stringWithFormat: @"ALTER TABLE t_homeGroupDetial ADD creatTime text"]];
            [db executeStatements:[NSString stringWithFormat: @"ALTER TABLE t_homeGroupDetial ADD userId text"]];
            // 更新完成后,版本号迭代
            verson++;
           //写入新的版本号
            [db setUserVersion:verson];
            if ([currentHPCacheToolVerson integerValue] == verson) {
                break;
            }
        }
        default:
            [ZZHUDMessage showCompletedText:@"数据库升级失败,请在个人中心中反馈" withCompletedType:HUDShowCompletedTypeError];
            break;
    }
}

以上呢,就是一个简单的数据库升级的方案,当然,具体的数据库的升级细节,还需要根据具体的项目调整方案
这里会不断更新自己项目工程中遇到的BUG和问题,并给出相关的解决方案,希望大家多多交流.谢谢
最后,附上个人的Github,相互学习,相互交流:zhangfurun的Github

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,607评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,047评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,496评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,405评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,400评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,479评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,883评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,535评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,743评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,544评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,612评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,309评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,881评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,891评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,136评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,783评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,316评论 2 342

推荐阅读更多精彩内容