我的标签栏控制器有问题。我的应用程序由一个带有两个视图的标签栏控制器组成。在第一个我将记录插入sqlite数据库,在第二个中有一个包含所有数据库记录的表视图。我希望当我在数据库中插入新记录时,表视图已更新。这只发生在方法viewDidLoad中,即只发生一次。有没有办法知道标签栏项目何时更改然后更新表格?我曾尝试使用这些属性:创建ViewController类的对象,并从其他ViewController访问该属性......但我无法做到。 感谢
//Insert new record view
sqlite3_stmt *statement;
const char*dbpath=[databasePath UTF8String];
if(sqlite3_open(dbpath, &DB) == SQLITE_OK)
{
NSString *insertSQL=[NSString stringWithFormat:@"INSERT INTO Example(Id, name) VALUES (?,?)"];
const char *insert_stmt=[insertSQL UTF8String];
if(sqlite3_prepare(DB, insert_stmt, -1, &statement, NULL) == SQLITE_OK )
{
sqlite3_bind_text(statement, 1, [id UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(statement, 2, [name.text UTF8String], -1, SQLITE_TRANSIENT);
}
if(sqlite3_step(statement) == SQLITE_DONE)
{
NSLog(@"OK");
}
else
{
NSLog(@"Error");
}
sqlite3_finalize(statement);
sqlite3_close(DB);
}
else
{
NSLog(@"Error");
}
SecondViewController *svc=[SecondViewController alloc] initWithNibname:@"Second" bundle:nil];
[svc.tableView reloadData];
答案 0 :(得分:0)
在您在数据库中插入记录的最后,您可以发送通知,提醒SecondViewController
首先替换
SecondViewController *svc=[SecondViewController alloc] initWithNibname:@"Second" bundle:nil];
[svc.tableView reloadData];
使用:
[[NSNotificationCenter defaultCenter] postNotificationName:@"DidUpdateDatabase" object:self];
在viewDidLoad
的{{1}}中添加此块以收听更改:
SecondViewController
这称为通知模式,允许对象彼此分离并仍然保持通信。
编辑:
另一个解决方案是[[NSNotificationCenter defaultCenter] addObserverForName:@"DidUpdateDatabase"
object:nil
queue:[NSOperationQueue currentQueue]
usingBlock:^(NSNotification *note) {
[self.tableView reloadData];
}];
SecondViewController
来电viewDidAppear
。这将导致每次用户进入该视图时重新加载