2013-10-14 26 views
0

我在我的應用程序中有一個共享的nsmutablearray。我從一個sqlite數據庫拉一堆數據並添加到數組中。該數組具有正確數量的對象作爲數據庫,但是當我調用objectAtIndex時,我總是得到相同的值 - 最後一個記錄值。總是得到共享nsmutablearray中的最後一個對象

所以我不確定我的應用程序在添加共享數組或從中提取數據失敗。下面是一些代碼:最後兩個的NSLog的給我相同的輸出,如果你合成魂鬥羅類的屬性是不正確

SYSAppDelegate *appDelegate = (SYSAppDelegate *)[[UIApplication sharedApplication] delegate]; 

    Contra *contra = [[Contra alloc]init]; 

    sqlite3_stmt *statement; 

    int recordCount = 0; 



    if (sqlite3_open([appDelegate.dbPathString UTF8String], &_DB)==SQLITE_OK) { 
     [appDelegate.array removeAllObjects]; 

     NSString *querySql = [NSString stringWithFormat:@"SELECT * FROM DATATABBLE"]; 
     const char* query_sql = [querySql UTF8String]; 

     if (sqlite3_prepare(_DB, query_sql, -1, &statement, NULL)==SQLITE_OK) { 
      while (sqlite3_step(statement)==SQLITE_ROW) { 
       NSString *start = [[NSString alloc] initWithUTF8String:(const char *)sqlite3_column_text(statement, 1)]; 
       NSString *stop = [[NSString alloc] initWithUTF8String:(const char *)sqlite3_column_text(statement, 2)]; 
       NSString *cTime = [[NSString alloc] initWithUTF8String:(const char *)sqlite3_column_text(statement, 3)]; 
       NSString *intensity = [[NSString alloc] initWithUTF8String:(const char *)sqlite3_column_text(statement, 4)]; 
       NSString *timeElapsed = [[NSString alloc] initWithUTF8String:(const char *)sqlite3_column_text(statement, 5)]; 
       NSString *hour = [[NSString alloc] initWithUTF8String:(const char *)sqlite3_column_text(statement, 6)]; 



       [contra setStartDate:start]; 
       [contra setStopDate:stop]; 
       [contra setIntensity:[intensity intValue]]; 
       [contra setCTime:[cTime intValue]]; 
       [contra setTimeElapsed:[timeElapsed intValue]]; 
       [contra setHour:[hour intValue]]; 



       [appDelegate.array addObject:contra]; 
       recordCount++; 

      } 

     } 
    } 


    //Get data from array 

    //Get last object 
    contra = [appDelegate.array lastObject]; 

    NSLog(@"cont length: %i.", contra.cTime); 


    //Get an earlier object 
    contra = [appDelegate.array objectAtIndex:recordCount -2]; 
    NSLog(@"two cont length: %i", contra.cTime); 

回答

0

我不知道。

我最好建議你把Contra * contra = [[Contra alloc] init]; while循環中的語句並嘗試。

0

您正在經歷一個while循環,並將新值分配給每個對象上相同對象的屬性。實際上,您的NSMutableArray在每個位置都有相同的對象,並且每次迭代都會更改同一對象的屬性值。因此,您將在每個測試的索引處獲得相同的值 - 您在該對象上設置的最後一個屬性值。

移動語句Contra * contra = [[Contra alloc] init];在while循環中。然後,數組中的每個對象都是唯一的,您將得到正確的結果。