数据源更新时刷新tableview

时间:2014-07-03 10:42:50

标签: ios objective-c tableview addressbook reloaddata

构建连接到联系人应用程序并操纵它们的iOS应用程序。

我有什么

管理单元格的

Tableview类,实现从 Addressbook 中检索所有联系人列表的方法,并在表格视图单元格中显示内容数组。导入Person

DetailedView,当点击一个单元格时,它会带您进入详细视图,您可以在其中更改数据,名称,电话等的值。

Person具有tableview导入以接收地址簿联系人详细信息,姓名,姓氏等的属性。

我想要什么

当用户从联系人应用程序(Apple的一个)添加新联系人时,当再次将应用程序带到前台并使其处于活动状态时,tableviewlist会更新视图并列出所有联系人,包括添加的最新联系人。哪里是最好的地方,以确保我总是更新我的阵列&重新载入我的tableview?

3 个答案:

答案 0 :(得分:1)

application:didFinishLaunchingWithOptions:中插入以下代码以注册地址簿更改通知:

ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, NULL);
ABAddressBookRegisterExternalChangeCallback(addressBook, addressBookChanged, self);

然后实现addressBookChanged方法:

void addressBookChanged(ABAddressBookRef addressBook, CFDictionaryRef info, void *context) {
    UITableView *tableView = tableViewYouWantToUpdateOnABChange;
    [tableView reloadData];
}

有关详细信息,请查看ABAddressBook reference

答案 1 :(得分:0)

当调用包含查看器(UIViewController或UITableViewController)viewWillAppear的方法时,可以触发表视图的重载数据。当您打开详细视图并更新数据关闭详细视图后,这将解决问题。

答案 2 :(得分:-1)

在viewWillAppear方法中重新加载tableview。然后再次检查appdelegate文件的“applicationWillEnterForeground”方法。检查控制器和tableview对象是否有当前实例。如果是这样重新加载你的表。

让你的控制器是MyCont并确保你已经在控制器类ok中创建了tableview对象的属性。现在转到appdelegate.h并编写

@property(nonatomic,retain) MyCont *cont;

转到appdelegate.m并使用

@synthesize cont;

现在转到MyCont类的viewDidLoad()方法并编写

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
appdelegate.cont = self; 

现在转到AppDelegate类的applicationWillEnterForeground()并编写

  if(cont)
    {
     [cont.tableviewobject reloadData]; 
    }

通过这样做,您的tableview数据源元数据将被触发。