2014-07-03 149 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