2015-04-21 29 views
0

我在tableview中有一個NSFetchedResultsController,並試圖從另一個控制器調用它,但出現錯誤。IOS/XCODE:在其他類中調用NSFetchedResultsController方法

我進口tableVC到otherVC,但我得到一個「的選擇沒有已知的類方法‘fetchedResultsController’。任何人能發現什麼,我做錯了什麼?謝謝。

code in tableVC.h 
-(NSFetchedResultsController *)fetchedResultsController; 
tableVC.m 
-(NSFetchedResultsController *)fetchedResultsController { 
    if (_fetchedResultsController==nil){ 
     NSFetchRequest *fetchRequest= [[NSFetchRequest alloc] init]; 
     ... 
    return _fetchedResultsController; 
} 
otherVC.m 
#import "tableVC.h" 

    [tableVC fetchedResultsController]; 

感謝您的任何建議。

回答

2

「的選擇沒有已知的類方法」表示你調用一個類的方法,而不是一個實例方法。

類方法與領先+符號定義,你在tableVC.h fetchedResultsController與定義人eading - 簽名,表明它是一種實例方法。

解決方法是將tableVC.h中fetchedResultsController的方法簽名更改爲一個類方法,或將其他VC.m中的調用更改爲使用tableVC的實例而不是類本身。

根據您的代碼示例,它看起來像fetchedResultsController方法被正確定義爲實例方法,所以您需要在其他VC類中使用tableVC的實例。

+0

好的。做tableVC * tableVC = nil; [tableVC fetchedResultsController];似乎得到了解決方法,所以我打上了正確的問題。但是,有沒有辦法將FRC設置爲零,以便我可以重新加載它。它延遲加載,但因爲它已經存在,所以不會重新獲取。 – user1904273

+0

通常,如果您的NSFetchedResultsController未被跟蹤(沒有分配任何委託),並且您沒有更改謂詞,並且您尚未設置緩存,那麼您只需調用[fetchedResultsController performFetch],然後再調用在你的表視圖[self.tableView reloadData]上重載數據。 如果你正在使用緩存,然後看看[NSFetchedResultsController deleteCacheWithName:cacheName]。 我還建議查看設置委託並使用跟蹤,以便表視圖始終保持最新狀態,因爲對模型進行了更改。 –

+0

表VC已註冊爲委託,並在添加新項目時得到更新,但由於某些原因,儘管保存代碼完全相同,但在編輯項目時它不會更新。另外,有關問題的細節VC沒有表格,只是標籤和圖片。我無法讓這些刷新。理解MVC的價值,但卻發現IOS內如此微不足道的事情非常複雜。 – user1904273

相關問題