始终在共享的nsmutablearray中获取最后一个对象

时间:2013-10-14 21:39:14

标签: ios objective-c sqlite

我的应用程序中有一个共享的nsmutablearray。我从sqlite数据库中提取了大量数据并添加到数组中。数组具有正确数量的对象作为数据库,但是当我调用objectAtIndex时,我总是得到相同的值 - 最后的记录值。

所以我不确定我的应用是否无法添加到共享阵列或从中提取数据。这是一些代码:最后两个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);

2 个答案:

答案 0 :(得分:0)

我不确定你是否合成了Contra类的属性。

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

答案 1 :(得分:0)

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

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