关于指针问题

关于指针问题

一、概述

在用数组保存模型时,发现数组里面的数据都一样,就是在添加数据时出错

二、问题代码:

//查询数据
- (void)select{
    JZInfoModel *model = [JZInfoModel new];
    //关键字 limit 0,2 从哪个位置读 每次读几个
    NSString *selectSql = @"select * from t_student";
    //1.预处理 -1表示语句长度自己计算
    sqlite3_stmt *stmt = NULL;
    if (sqlite3_prepare(_sql, [selectSql UTF8String], -1, &stmt, NULL) == SQLITE_OK) {
        //2.一条一条读取数据 如果有 返回值就是SQLITE_ROW
        while (sqlite3_step(stmt) == SQLITE_ROW) {
            //一列一列地去读取每一条记录 1表示列
            char *name = (char *)sqlite3_column_text(stmt, 1);
            char *age = (char *)sqlite3_column_text(stmt, 2);
            NSData *data = [NSData dataWithBytes:sqlite3_column_blob(stmt, 3) length:sqlite3_column_bytes(stmt, 3)];
            //NSLog(@"%s, %s, %@", name, age, [UIImage imageWithData:data]);
            
            model.img = [UIImage imageWithData:data];
            model.name = [NSString stringWithFormat:@"%s", name];
            model.age = [NSString stringWithFormat:@"%s", age];
            
            [self.modelsArr addObject:model];
            NSLog(@"%@", self.modelsArr);
        }
    } else {
        NSLog(@"预处理失败");
    }
}

打印数组:

三、原因分析

两个元素指向同一片地址 ,数组在保存数据时,并没有保存数具体的数值,而是保存地址。model里面属性的值在变,地址没有变。类似:

int a = 1;
int a = 2;

最终model保存的是最后的数据

+

 

四、解决方案:

每次保存模型时,重新分配空间即可,即把创建的代码放到循环中

代码:

//查询数据
- (void)select{
    //关键字 limit 0,2 从哪个位置读 每次读几个
    NSString *selectSql = @"select * from t_student";
    //1.预处理 -1表示语句长度自己计算
    sqlite3_stmt *stmt = NULL;
    if (sqlite3_prepare(_sql, [selectSql UTF8String], -1, &stmt, NULL) == SQLITE_OK) {
        //2.一条一条读取数据 如果有 返回值就是SQLITE_ROW
        while (sqlite3_step(stmt) == SQLITE_ROW) {
      //这样改 JZInfoModel
*model = [JZInfoModel new]; //一列一列地去读取每一条记录 1表示列 char *name = (char *)sqlite3_column_text(stmt, 1); char *age = (char *)sqlite3_column_text(stmt, 2); NSData *data = [NSData dataWithBytes:sqlite3_column_blob(stmt, 3) length:sqlite3_column_bytes(stmt, 3)]; //NSLog(@"%s, %s, %@", name, age, [UIImage imageWithData:data]); model.img = [UIImage imageWithData:data]; model.name = [NSString stringWithFormat:@"%s", name]; model.age = [NSString stringWithFormat:@"%s", age]; [self.modelsArr addObject:model]; NSLog(@"%@", self.modelsArr); } } else { NSLog(@"预处理失败"); } }

 

分析: 

 

posted @ 2019-05-09 23:55 健泽 阅读( ...) 评论( ...) 编辑 收藏
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值