добавленный объект не обновляется в UITableView с использованием базы данных SQlite - PullRequest
0 голосов
/ 25 августа 2011

У меня есть база данных SQL, которую я могу отобразить в UITableView.Но если попытаться добавить какой-либо объект, он не обновляется в UITableView.Обновляется только после перезапуска приложения.Когда я удаляю объекты из UITableView, есть встроенный метод, который выполняет удаление: if (editingStyle == UITableViewCellEditingStyleDelete). Есть ли такие методы для добавления объектов?

Мои методы добавления следующие:

static sqlite3 *addStmt = nil;   

- (void) add_Place:(Place *)PlaceObj {

    NSLog(@"Super add called");

    //Add it to the database.
    [PlaceObj addPlace];

    //Add it to the coffee array.
    [PlacesArray addObject:PlaceObj];
}

- (void) addPlace {


    NSLog(@"addplace called");
    if(addStmt == nil)
    {
        NSLog(@"inside addstmt");
        const char *sql = "INSERT INTO places_table ( PlaceName, PlaceAddress) Values (?,?)";
        if(sqlite3_prepare_v2(database, sql, -1, &addStmt, NULL) != SQLITE_OK)
        {
            NSLog(@"error inside if loop");
            NSAssert1(0, @"Error while creating add statement. '%s'", sqlite3_errmsg(database));

        }
    }

    NSLog(@"outside if Loop") ;

    sqlite3_bind_text(addStmt, 1, [PlaceName UTF8String], -1, SQLITE_TRANSIENT);
    sqlite3_bind_text(addStmt, 2, [PlaceAddress UTF8String], -1, SQLITE_TRANSIENT);

    if(SQLITE_DONE != sqlite3_step(addStmt))
    {
        NSAssert1(0, @"Error while inserting data. '%s'", sqlite3_errmsg(database));;
    }
    //  NSAssert1(0, @"Error while inserting data. '%s'", sqlite3_errmsg(database));
    else
    {
        //SQLite provides a method to get the last primary key inserted by using sqlite3_last_insert_rowid
        PlaceID = sqlite3_last_insert_rowid(database);
        NSLog(@"sqlite3_last_insert_rowid") ;
    }

    //Reset the add statement.
    sqlite3_reset(addStmt);
}

Ответы [ 2 ]

1 голос
/ 25 августа 2011

Вы можете сделать это следующим образом. После добавления объекта просто вызовите метод ReloadData UITableView, и он снова перезагрузит таблицу. Поэтому нет необходимости перезапускать приложение снова.

    static sqlite3 *addStmt = nil;   

    - (void) add_Place:(Place *)PlaceObj {

        NSLog(@"Super add called");

        //Add it to the database.
        [PlaceObj addPlace];

        //Add it to the coffee array.
        [PlacesArray addObject:PlaceObj];
        [TableView ReloadData];
    }

    - (void) addPlace {


        NSLog(@"addplace called");
        if(addStmt == nil)
        {
            NSLog(@"inside addstmt");
            const char *sql = "INSERT INTO places_table ( PlaceName, PlaceAddress) Values (?,?)";
            if(sqlite3_prepare_v2(database, sql, -1, &addStmt, NULL) != SQLITE_OK)
            {
                NSLog(@"error inside if loop");
                NSAssert1(0, @"Error while creating add statement. '%s'", sqlite3_errmsg(database));

            }
        }

        NSLog(@"outside if Loop") ;

        sqlite3_bind_text(addStmt, 1, [PlaceName UTF8String], -1, SQLITE_TRANSIENT);
        sqlite3_bind_text(addStmt, 2, [PlaceAddress UTF8String], -1, SQLITE_TRANSIENT);

        if(SQLITE_DONE != sqlite3_step(addStmt))
        {
            NSAssert1(0, @"Error while inserting data. '%s'", sqlite3_errmsg(database));;
        }
        //  NSAssert1(0, @"Error while inserting data. '%s'", sqlite3_errmsg(database));
        else
        {
            //SQLite provides a method to get the last primary key inserted by using sqlite3_last_insert_rowid
            PlaceID = sqlite3_last_insert_rowid(database);
            NSLog(@"sqlite3_last_insert_rowid") ;
        }

        //Reset the add statement.
        sqlite3_reset(addStmt);
    }

Приветствия

0 голосов
/ 26 августа 2011

Я думаю, что вы ищете insertRowsAtIndexPaths:withRowAnimation.Это добавит строки с плавной анимацией по вашему выбору.Это будет работать, только если ваш UITableViewDataSource правильно закодирован.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...