2013-07-25 31 views
0

下面我有我在哪裏獲取數據的代碼...在NSMuttable陣列添加產品不能正常工作

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);我看到下面的輸出(用於所有IDS)

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

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

您是否分配了「產品」? –

回答

1

你有兩個問題;

你還沒有分配你的數組,只是聲明瞭一個指向它的指針。將此添加到您的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 
+0

謝謝第二行... :) –

1

分配內存以products陣列,

products = [[NSMutableArray alloc]init]; 
+0

謝謝... 6分鐘後會接受答案.. –

+0

其工作...但我面臨一個問題...當我拉數據時,數據從第二條記錄開始......我沒有獲得第一條記錄。任何想法爲什麼發生這種情況? –

+0

你的代碼看起來很好,但在其他地方可能是你錯了,但不知道。 – 2013-07-25 11:29:46

1

很可能是產品從未初始化,因此您的[products addObject: product];將導致零亂年齡不會給出任何錯誤,但不會向產品添加任何內容。

您可以初始化產品類的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; 
} 
1
database=nil; 

    products = [[NSMutableArray alloc]init]; //Paste this line below database=nil; 
0

我認爲你是不初始化產品陣列。

products = [[NSMutableArray alloc]init]; 

你需要首先初始化然後做你想做的事。