【问题标题】:adding product in NSMuttable Array is not working在 NSMuttable 数组中添加产品不起作用
【发布时间】:2013-07-25 06:06:45
【问题描述】:

我在下面的代码中获取数据...

database=nil;
    if (sqlite3_open([sqlitePath UTF8String], &database) == SQLITE_OK){
        const char *sql = [[NSString stringWithFormat:@"select * from products"] UTF8String];
        sqlite3_stmt *updateStmt = nil;
        if(sqlite3_prepare_v2(database, sql, -1, &updateStmt, NULL) != SQLITE_OK)
        {
            //NSAssert1(0, @"Error while creating update statement. '%s'", sqlite3_errmsg(database));
        }
        if (SQLITE_DONE != sqlite3_step(updateStmt)){
            //NSAssert1(0, @"Error while creating database. '%s'", sqlite3_errmsg(database));
        }

        NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
        while(sqlite3_step(updateStmt) == SQLITE_ROW) {
            NSLog(@"ok=====");
            NSNumber *recordID = [NSNumber numberWithInt: sqlite3_column_int(updateStmt, 0)];
            NSString *fullName = [[NSString alloc] initWithUTF8String: (char *)sqlite3_column_text(updateStmt, 1)];
            NSString *photoName = [[NSString alloc] initWithUTF8String: (char *)sqlite3_column_text(updateStmt, 2)];

            NSLog(@"=====%@===%@====%@====", recordID, fullName, photoName);

            NSDictionary *product = [[NSDictionary alloc] initWithObjectsAndKeys: recordID, @"id", fullName, @"fullName", photoName, @"photoName", nil];
            [products addObject: product];
            [product release];
        }

        NSLog(@"total data is ==== %d", [products count]);

        [numberFormatter release];

        sqlite3_reset(updateStmt);
        sqlite3_finalize(updateStmt);

    }

当我运行这段代码时,我得到如下输出。

2013-07-25 14:12:14.785 SQLTest[88568:11303] =====2===test 002====21.45====
2013-07-25 14:12:14.786 SQLTest[88568:11303] =====4===test 002====21.45====
2013-07-25 14:12:14.786 SQLTest[88568:11303] =====6===test 002====22.16====
2013-07-25 14:12:14.787 SQLTest[88568:11303] =====7===test 002====22.17====
2013-07-25 14:12:14.787 SQLTest[88568:11303] total data is ==== 0

我的问题是当我在 products 添加数据时,为什么我得到 [products count] 为 0 而不是 4?

当我使用 NSLog(@"print===%@", product); 时,我看到下面的输出(对于所有 id)

{
    fullName = "test 002";
    id = 7;
    photoName = "22.17";
}

注意

@property (nonatomic, assign) sqlite3 *database;
@property (nonatomic, retain) NSMutableArray *products;
@property (nonatomic, assign) NSUInteger currentProduct;

【问题讨论】:

  • 你分配products了吗?

标签: ios objective-c sqlite nsmutablearray nsarray


【解决方案1】:

你有两个问题;

你还没有分配你的数组,只是声明了一个指向它的指针。将此添加到您的初始化中;

products = [[NSMutableArray alloc]init];

在获取数据之前,您还跳过了结果的第一行;

if (SQLITE_DONE != sqlite3_step(updateStmt)){     // <-- skips first row
    //NSAssert1(0, @"Error while creating database. '%s'", sqlite3_errmsg(database));
}

NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
while(sqlite3_step(updateStmt) == SQLITE_ROW) {   // Starts at second row

【讨论】:

    【解决方案2】:

    将内存分配给products数组,

    products = [[NSMutableArray alloc]init];
    

    【讨论】:

    • 它的工作......但我面临一个问题......当我提取数据时,数据从第二条记录开始......我没有得到第一条记录......知道为什么会这样发生了什么?
    • 您的代码看起来不错,但其他地方可能是您出错了,但不确定。
    【解决方案3】:

    产品很可能从未初始化,因此您的[products addObject: product]; 将产生一条 nil 消息,该消息不会给出任何错误,但也不会向产品添加任何内容。

    你可以在你的类初始化中初始化产品:

    - (id)init {
       self = [super init];
       if (self) {
          self.products = [[NSMutableArray alloc] init];
       }
       return self;
    }
    

    或者您可以仅在第一次调用时才延迟加载产品:

     - (NSMutableArray *)products {
        if (!_products) _products = [[NSMutableArray alloc] init];
        return _products;
     }
    

    【讨论】:

      【解决方案4】:
      database=nil;
      
          products = [[NSMutableArray alloc]init]; //Paste this line  below database=nil;
      

      【讨论】:

        【解决方案5】:

        我认为您没有初始化产品数组。

        products = [[NSMutableArray alloc]init];
        

        你需要先初始化,然后做你想做的事。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-02-05
          • 2021-12-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多