我正在使用XML解析器,SQLitedatabase和View(带有导航栏和tableView)构建应用程序。 SQLite数据库包含一些数据,我想要做的是当我按下导航栏中的添加按钮时,xml内容被解析,添加到SQLite数据库中,数据被添加到tableView中。 XML成功解析并添加到SQLite数据库中。但是当我这样做时:
-(void)add_Clicked:(id)sender {
......
[self.tableView reloadData]
}
仅加载新数据并且现有数据已消失。当我终止应用程序并重新启动它时,数据被正确加载,我得到了tableView中的所有数据。
所以我的问题是:如何将新数据添加到tableView中并仍然查看现有数据?
答案 0 :(得分:0)
我的add_clicked void是:
- (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的void。我认为这是我必须做一些改变的地方,或者让这个方法再次调用?我认为问题是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.
}