Ios 在NSMuttable数组中添加产品无效
我在下面的代码中获取数据Ios 在NSMuttable数组中添加产品无效,ios,objective-c,sqlite,nsmutablearray,nsarray,Ios,Objective C,Sqlite,Nsmutablearray,Nsarray,我在下面的代码中获取数据 database=nil; if (sqlite3_open([sqlitePath UTF8String], &database) == SQLITE_OK){ const char *sql = [[NSString stringWithFormat:@"select * from products"] UTF8String]; sqlite3_stmt *updateStmt = nil; if(sq
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)
注
将内存分配给产品阵列
products = [[NSMutableArray alloc]init];
将内存分配给产品阵列
products = [[NSMutableArray alloc]init];
很可能产品从未初始化,因此您的[products addObject:product]
将生成一条nil消息,该消息不会给出任何错误,但也不会向产品添加任何内容
您可以在类init中选择init产品:
- (id)init {
self = [super init];
if (self) {
self.products = [[NSMutableArray alloc] init];
}
return self;
}
或者,您可以仅在第一次调用时延迟加载产品:
- (NSMutableArray *)products {
if (!_products) _products = [[NSMutableArray alloc] init];
return _products;
}
很可能产品从未初始化,因此您的[products addObject:product]
将生成一条nil消息,该消息不会给出任何错误,但也不会向产品添加任何内容
您可以在类init中选择init产品:
- (id)init {
self = [super init];
if (self) {
self.products = [[NSMutableArray alloc] init];
}
return self;
}
或者,您可以仅在第一次调用时延迟加载产品:
- (NSMutableArray *)products {
if (!_products) _products = [[NSMutableArray alloc] init];
return _products;
}
我认为您没有初始化产品阵列
products = [[NSMutableArray alloc]init];
您需要先初始化,然后再执行所需操作。我认为您没有初始化产品阵列
products = [[NSMutableArray alloc]init];
你需要先初始化,然后做你想做的事。你有两个问题
您没有分配数组,只是声明了一个指向它的指针。将此添加到您的init中
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
if(SQLITE\u DONE!=sqlite3\u步骤(updateStmt)){/您有两个问题
您还没有分配数组,只是声明了一个指向它的指针
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
if(SQLITE\u DONE!=sqlite3\u步骤(updateStmt)){//您是否分配了产品
?您是否分配了产品
?它在工作…但我面临一个问题…当我提取数据时,数据是从第二条记录开始的…我没有得到第一条记录…知道为什么会发生这种情况吗?您的代码看起来不错,但在其他地方可能是您出错了,但不确定。它在工作…但我面临一个问题…当我提取数据时,数据是从第二条记录开始的…我没有得到第一条记录..知道为什么会发生这种情况吗?您的代码看起来不错,但在其他地方可能是您出错了,但不确定。