总是得到共享nsmutablearray中的最后一个对象

问题描述:

我在我的应用程序中有一个共享的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); 

我不知道。

我最好建议你把Contra * contra = [[Contra alloc] init]; while循环中的语句并尝试。

您正在经历一个while循环,并将新值分配给每个对象上相同对象的属性。实际上,您的NSMutableArray在每个位置都有相同的对象,并且每次迭代都会更改同一对象的属性值。因此,您将在每个测试的索引处获得相同的值 - 您在该对象上设置的最后一个属性值。

移动语句Contra * contra = [[Contra alloc] init];在while循环中。然后,数组中的每个对象都是唯一的,您将得到正确的结果。