我有一個從外部數據庫下載數據的單例(PTDatabaseAccsesser)。 當下載完所有數據後,單例應該調用一個委託,該委託是UITableViewController的子類。但是,我得到這個錯誤:單身代表不會工作
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason:
'-[__NSCFType doneDownloadingData]: unrecognized selector sent to instance...
這是我的委託設置的UITableViewController的子類:
- (void)viewDidLoad {
[[PTDatabaseAccesser sharedInstance] setDelegate:self];
NSLog(@"%@", [[PTDatabaseAccesser sharedInstance] delegate]);
}
的的NSLog表明,一切是正確的在這裏。
這是從PTDatabaseAccsesser代碼上的代表調用:
NSLog(@"%@", [self delegate]);
[[self delegate] doneDownloadingData];
的的NSLog這裏然而是示出了代表是相同類型的如在以上的錯誤消息。
這是我如何創建單:
我已經確定了單的工作原理是在上述兩種方法實現使用斷點。
您是否確實委託對象在將委託消息發送給它時處於活動狀態?爲了安全起見,當您釋放控制器時,您應該委託委託人。這樣你就可以防止消息發送到殭屍對象 – Lio
如果這是你的意思,在委託消息發送之前調用UITableViewController子類的viewDidLoad。 – user957032
@ user957032不,他意味着在設置委託和發送消息之間正在取消分配子類。要麼你的單例應該保留它的委託,要麼在子類被取消分配之前,它應該把委託屬性設置爲零。 – ughoavgfhw