Перезагрузите новые данные в tableView - PullRequest
0 голосов
/ 19 января 2011

Я создаю приложение с парсером XML, базой данных SQL и представлением (с панелью навигации и табличным представлением). База данных SQLite содержит некоторые данные, и я пытаюсь сделать так, чтобы при нажатии кнопки добавления на панели навигации содержимое xml анализировалось, добавлялось в базу данных SQLite, а данные добавлялись в tableView. XML успешно анализируется и добавляется в базу данных SQLite. Но когда я делаю это:

-(void)add_Clicked:(id)sender {
    ......
    [self.tableView reloadData]
}

Загружаются только новые данные, а существующие данные исчезают. Когда я закрываю приложение и перезапускаю его, данные загружаются правильно, и я получаю все данные внутри tableView.

Итак, мой вопрос: как добавить новые данные в tableView и по-прежнему просматривать существующие данные?

1 Ответ

0 голосов
/ 20 января 2011

Моя пустота add_clicked:

- (void) add_Clicked:(id)sender {


    NSURL *url = [[NSURL alloc] initWithString:@"http://sites.google.com/site/iphonesdktutorials/xml/Books.xml"];
    NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:url];

    //Initialize the delegate.
    XMLParser *parser = [[XMLParser alloc] initXMLParser];

    //Set delegate
    [xmlParser setDelegate:parser];

    //Start parsing the XML file.
    BOOL success = [xmlParser parse];

    if(success)
        NSLog(@"No Errors");
    else
        NSLog(@"Error Error Error!!!");

    [self.tableView reloadData];

}

Внутри моего класса Book у меня есть пустота getInitialDataToDisplay.Я предполагаю, что это где я должен сделать некоторые изменения, или снова вызвать этот метод?Я думаю, что проблема в том, что tableView читает содержимое sqlite только при загрузке приложения.И да, у меня нет абсолютно никакого опыта в программировании, но я немного научился.

+ (void) getInitialDataToDisplay:(NSString *)dbPath {
    BooksAppDelegate *appDelegate = (BooksAppDelegate *)[[UIApplication sharedApplication] delegate];

    if (sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK) {

        const char *sql = "select bookID, title from books";
        sqlite3_stmt *selectstmt;
        if(sqlite3_prepare_v2(database, sql, -1, &selectstmt, NULL) == SQLITE_OK) {

            while(sqlite3_step(selectstmt) == SQLITE_ROW) {

                NSInteger primaryKey = sqlite3_column_int(selectstmt, 0);
                Book *bookObj = [[Book alloc] initWithPrimaryKey:primaryKey];
                bookObj.title = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 1)];

                bookObj.isDirty = NO;

                [appDelegate.bookArray addObject:bookObj];
                [bookObj release];
            }
        }
    }
    else
        sqlite3_close(database); //Even though the open call failed, close the database connection to release all the memory.
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...