iOS知乎日报仿写--第五周

前言

因为上周的金工实习,所以知乎日报的仿写往后面拖了一周,但深的东西也比较少了 ;所以这次的内容不会很多 ;
具体完成了收藏和点赞的本地持久化和滑动更新;

点赞收藏功能的实现

两者原理差不多 ;

- (void)presszan : (UIButton*) zanbtn{
    if (zanbtn.selected == NO) {
        zanbtn.selected = YES ;
            if ([self.mModel.zan_Database open]) {
                FMResultSet* resultSet = [self.mModel.zan_Database executeQuery:@"SELECT * FROM zanData"] ;
                int juide = 0 ;
                while ([resultSet next]) {
                    NSString* string = [resultSet stringForColumn:@"id"] ;
                    NSString* str =  [self.newarray[self.index][@"id"] stringValue] ;
                    if ([string isEqual:str]) {
                        juide = 1 ;
                    }
                }
        
                if (juide == 0) {
//                    NSString* string = self.newarray[self.index][@"id"] ;
//                    NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
//                    NSNumber *number = [numberFormatter numberFromString:string];
                    NSNumber* number = self.newarray[self.index][@"id"] ;
                    BOOL result = [self.mModel.zan_Database executeUpdate:@"INSERT INTO zanData (id) VALUES (?)",number] ;
                    if (result) {
                        NSLog(@"插入成功") ;
                    } else {
                        NSLog(@"插入失败") ;
                    }
                } else {
                    NSLog(@"已存在") ;
                }
                }
    } else {
        zanbtn.selected = NO ;
            if ([self.mModel.zan_Database open]) {
//                NSString* string = self.newarray[self.index][@"id"] ;
//                NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
//                NSNumber *number = [numberFormatter numberFromString:string];
                NSNumber* number = self.newarray[self.index][@"id"] ;
                BOOL result = [self.mModel.zan_Database executeUpdate:@"delete from zanData WHERE id = ?",number] ;
                if (result) {
                    NSLog(@"删除成功") ;
                } else {
                    NSLog(@"删除失败") ;
                }
                
            }
    }
    //更新点赞数
    int cnt = [self.mModel.extrdict[@"popularity"] intValue] + self.mView.zanbtn.selected ;
    NSNumber* number = [NSNumber numberWithInt:cnt] ;
    self.mView.label02.text = [NSString stringWithFormat:@"%@",[number stringValue]] ;
    

    
//    FMResultSet* resultSet01 = [self.mModel.zan_Database executeQuery:@"SELECT * FROM zanData"] ;
//
//    while ([resultSet01 next]) {
//        NSString* string = [resultSet01 stringForColumn:@"id"] ;
//    }
    [self.mModel.zan_Database close] ;
}

上面是我的点赞按钮函数,逻辑当爱就是,每次点击就对点赞按钮进行判断,当点赞时,遍历数据库中的数据,查看是否有当前新闻的id,没有则添加;取消点赞一样的 ;且每次都要及时更新点赞数的text ;

本地持久化

这里只是简单的使用了几个方法,具体可以看看本地持久化 ,这里对这里用的方法讲的要清楚一些 ;
数据库的创建:

 NSString* doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] ;
    NSString* file_name02 = [doc stringByAppendingPathComponent:@"shoucangData.sqlite"] ;
    self.shoucang_Database = [FMDatabase databaseWithPath:file_name02] ;

表的创建:

if ([self.shoucang_Database open]) {
        BOOL result = [self.shoucang_Database executeUpdate:@"CREATE TABLE IF NOT EXISTS shoucangData (id NOT NULL);"] ;
        if (result) {
            NSLog(@"创建表成功") ;
        } else {
            NSLog(@"创建表失败") ;
        }
        [self.shoucang_Database close] ;
    }

插入:

            if ([self.mModel.shoucang_Database open]) {
                FMResultSet* resultSet = [self.mModel.shoucang_Database executeQuery:@"SELECT * FROM shoucangData"] ;
                int juide = 0 ;
                while ([resultSet next]) {
                    NSString* string = [resultSet stringForColumn:@"id"] ;
                    NSString* str =  self.newarray[self.index][@"id"] ;
                    if ([string isEqual:str]) {
                        juide = 1 ;
                    }
                }
        
                if (juide == 0) {
                    NSString* string = self.newarray[self.index][@"id"] ;
                    NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
                    NSNumber *number = [numberFormatter numberFromString:string];
                    BOOL result = [self.mModel.shoucang_Database executeUpdate:@"INSERT INTO shoucangData (id) VALUES (?)",number] ;
                    if (result) {
                        NSLog(@"插入成功") ;
                    } else {
                        NSLog(@"插入失败") ;
                    }
                } else {
                    NSLog(@"已存在") ;
                }
                }

删除:

            if ([self.mModel.shoucang_Database open]) {
                NSString* string =self.newarray[self.index][@"id"] ;
                NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
                NSNumber *number = [numberFormatter numberFromString:string];
                BOOL result = [self.mModel.shoucang_Database executeUpdate:@"delete from shoucangData WHERE id = ?",number] ;
                if (result) {
                    NSLog(@"删除成功") ;
                } else {
                    NSLog(@"删除失败") ;
                }
            }

遍历:

 FMResultSet* resultSet01 = [self.mModel.shoucang_Database executeQuery:@"SELECT * FROM shoucangData"] ;
    
    while ([resultSet01 next]) {
        NSString* string = [resultSet01 stringForColumn:@"id"] ;
        NSLog(@"%@",string) ;
    }
    [self.mModel.shoucang_Database close] ;

演示图片

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

一些小问题

1.网络请求下来的数据类型不确定,最好打印它的类名看看。比如请求的今天和过往新闻的id时NSnumber类型的数字,而直接通过id网络请求到该新闻的信息中,id为NSString,当你拿着两个id对比时isequal方法一定会返回0 ;

2.收藏界面部分实现返回刷新,要对原来的数据数组初始化或者清空 ;这个过程感觉对内存的耗费很严重,之后打算再优化一下 ;

3,然后就是网络请求的异步队列没能实现 ;

总结

还有很大的改进空间,接下来一周会一点点的优化这个项目的,这里就基本完成了。
这应该时目前来说写过的一个最大的项目了,涉及到的知识也很全面,不仅仅是最前面知识的熟练应用,也是一次很好的锻炼 ;

好的,以下是用Spring Boot实现密码输入框显示与隐藏的代码演示: 1. 首先,在HTML中添加一个密码输入框和一个按钮,用于切换密码框是否显示: ```html <div class="form-group"> <label for="password">密码</label> <input type="password" class="form-control" id="password" name="password"> <button type="button" id="eye-btn" class="btn btn-default"> <span id="eye-icon" class="glyphicon glyphicon-eye-open"></span> </button> </div> ``` 2. 接着,在JavaScript中添加代码,用于切换密码框是否显示: ```javascript $(document).ready(function() { // 切换密码框是否显示 $('#eye-btn').click(function() { var passwordInput = $('#password'); var eyeIcon = $('#eye-icon'); if (passwordInput.attr('type') === 'password') { passwordInput.attr('type', 'text'); eyeIcon.removeClass('glyphicon-eye-open').addClass('glyphicon-eye-close'); } else { passwordInput.attr('type', 'password'); eyeIcon.removeClass('glyphicon-eye-close').addClass('glyphicon-eye-open'); } }); }); ``` 3. 最后,在CSS中添加样式,用于调整按钮和图标的位置: ```css #eye-btn { margin-top: 25px; margin-left: -40px; position: relative; z-index: 2; } #eye-icon { position: absolute; top: 8px; right: 13px; z-index: 1; font-size: 1.5em; } ``` 这样,当用户点击按钮时,密码框的type属性将从password切换为text,从而显示密码;再次点击按钮时,密码框的type属性将切换回password,从而隐藏密码。同时,按钮上的图标也会随之切换。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值