Question

I might be doing this all wrong as I am still new to Objective C.

I am trying to retrieve data from an sqlite3 database and store it in a NSObject array.

Here is the viewDidLoad method in my implementation file.

- (void)viewDidLoad
{
    [super viewDidLoad];

    clients = [[NSMutableArray alloc] init];
    [self openDB];
    NSString *sql = [NSString stringWithFormat:@"SELECT * FROM clients"];
    sqlite3_stmt *statement;

    if(sqlite3_prepare_v2(db, [sql UTF8String], -1, &statement, nil)==SQLITE_OK)
    {
        while (sqlite3_step(statement)==SQLITE_ROW) {
            char *field1 = (char *) sqlite3_column_text(statement, 0);
            NSString *field1Str = [[NSString alloc]initWithUTF8String:field1];

            char *field2 = (char *) sqlite3_column_text(statement, 1);
            NSString *field2Str = [[NSString alloc]initWithUTF8String:field2];

            char *field3 = (char *) sqlite3_column_text(statement, 2);
            NSString *field3Str = [[NSString alloc]initWithUTF8String:field3];

            char *field4 = (char *) sqlite3_column_text(statement, 3);
            NSString *field4Str = [[NSString alloc]initWithUTF8String:field4];

            char *field5 = (char *) sqlite3_column_text(statement, 4);
            NSString *field5Str = [[NSString alloc]initWithUTF8String:field5];

            char *field6 = (char *) sqlite3_column_text(statement, 5);
            NSString *field6Str = [[NSString alloc]initWithUTF8String:field6];

            char *field7 = (char *) sqlite3_column_text(statement, 6);
            NSString *field7Str = [[NSString alloc]initWithUTF8String:field7];

            char *field8 = (char *) sqlite3_column_text(statement, 7);
            NSString *field8Str = [[NSString alloc]initWithUTF8String:field8];

            char *field9 = (char *) sqlite3_column_text(statement, 8);
            NSString *field9Str = [[NSString alloc]initWithUTF8String:field9];


            ClientObj *c1 = [[ClientObj alloc] initWithCompanyName:field1Str firstName:field2Str lastName:field3Str email:field4Str workPhone:field5Str mobilePhone:field6Str streetAddress:field7Str city:field8Str postalCode:field9Str];
        }
    }

    self.clients = [NSArray arrayWithObjects:c1,c2,c3,c4, nil];

}

I am trying to increment *c1 each time the while statement loops through the database. eg. c1, c2 ,c3, c4

I am then trying to add each ClientObj created from the database loop above to the clients array but I am not sure how to do this.

Any help or advice is very much appreciated

Was it helpful?

Solution

Initialize the array once before the loop:

self.clients = [[NSMutableArray alloc] init];

and then just add each client object to the array inside the loop:

while (sqlite3_step(statement) == SQLITE_ROW) {
    // ...
    ClientObj *c = [[ClientObj alloc] initWithCompanyName:field1Str firstName:field2Str lastName:field3Str email:field4Str workPhone:field5Str mobilePhone:field6Str streetAddress:field7Str city:field8Str postalCode:field9Str];
    [self.clients addObject:c];
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top