2014-07-03 111 views
0

构建连接到联系人应用程序并操作它们的iOS应用程序。数据源更新时刷新tableview

我有什么管理该细胞

Tableview类,实现方法,该方法从检索所有联系人列表地址簿,并显示的内容在表视图细胞阵列。进口Person

DetailedView,轻按一个细胞,它把你给详细视图,您可以更改数据,姓名,电话的价值,等等。当

Person类有实现代码如下进口接收地址簿属性联系人的详细信息,名字,姓氏等

我想要什么

当用户添加从联系人应用新的联系人(苹果公司的一个),把应用程序时再次前景和激活它, tableviewlist u更新视图并列出所有联系人,包括添加的最新联系人。哪里是最好的地方,以确保我总是更新我的阵列&重新加载我的tableview?

+2

应用程序确实已激活 –

+1

如果表视图是“UITableView”的子类,则它具有“reloadData”方法,这将更新表视图的表示。当你进入前景时触发这个方法。 – dasdom

+0

我知道方法** reloadData **,当我在viewWillAppear中使用它的时候它工作(当我在详细视图中并且回到tableview时),但是当我在前台或应用程序委托中使用它时,似乎没有用。当然,我导入了我的桌面视图和所有设置。 –

回答

0

刷新您的tableview里面的viewWillAppear方法。然后在你的appdelegate文件的“applicationWillEnterForeground”方法中再放一个检查。检查控制器和tableview对象是否有当前实例。如果是这样,请在这里重新加载你的表格

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

@property(nonatomic,retain) MyCont *cont; 

转到appdelegate.m和使用MyCont类的

@synthesize cont; 

现在转到viewDidLoad中()方法,并写

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

现在后藤applicationWillEnterForeground( )的AppDelegate类和写

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

通过完成所有这些,你的tableview数据源metod将被解雇。

+0

它不适用于“applicationWillEnterForeground”,我肯定错过了什么。我会告诉你我在做什么。 在AppDelegate中,我导入我的tableviewcontroller类,在applicationDidFinishLaunchingWithOptions和applicationWillEnterForeground中创建新的实例,我用我的TableViewController的实例调用reloadData –

+0

我的意思是它不起作用的是,我的地址簿联系人数组得到更新,但我的tableview不会改变。 –

+0

因为你已经创建了tableviewcontroller的新实例。在appdelegate(MyController * cont;)中创建控制器对象的属性,并在控制器类中自行初始化它。然后它会工作。 – Yogendra

0

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

+0

是的,但它不工作,如果我在桌面上,点击主页按钮,去和联系人应用程序中添加新的联系人,然后回到我的应用程序的桌面视图 –

0

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

+0

我怎么能在c addressBookChanged内自我调用?它说未申报的标识符。 –

+0

你不能在c函数中调用self,但是你会收到它作为你的函数的参数 - 参见http://stackoverflow.com/a/24575767/1499194 – alivingston