如何管理标签栏项目

时间:2014-12-31 16:09:01

标签: ios objective-c xcode uitableview uitabbarcontroller

我的标签栏控制器有问题。我的应用程序由一个带有两个视图的标签栏控制器组成。在第一个我将记录插入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];

1 个答案:

答案 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。这将导致每次用户进入该视图时重新加载