首先是我的代码:
@protocol SearchTableViewControllerDelegate
@required
- (void)didSelectFileCardsContent:(FileCardsContent*)content;
@end
@interface SearchTableViewController : UITableViewController <UISearchBarDelegate, UISearchDisplayDelegate>{
id <SearchTableViewControllerDelegate> delegate;
...
}
@property (nonatomic, assign) id <SearchTableViewControllerDelegate> delegate;
...
@end
---------------------------------------------------
@implementation SearchTableViewController
@synthesize ... delegate;
...
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
FileCardsContent *fileCardToShow = [self.tableData objectAtIndex:indexPath.row];
[self.delegate didSelectFileCardsContent:fileCardToShow];
}
...
@end
---------------------------------------------------
@interface FileCardsViewCotroller : UIViewController <SearchTableViewControllerDelegate>{
...
@end
---------------------------------------------------
@implementation FileCardsViewCotroller
...
- (void)didSelectFileCardsContent:(FileCardsContent*)content{
[managedFileCards insertSingleContent:content];
self.currentFileCardsContent = content;
questionView1.text = currentFileCardsContent.question;
}
@end
我的问题是 - (void)didSelectFileCardsContent:FileCardsViewCotroller中的(FileCardsContent *)内容永远不会被调用。 没有编译器警告或错误。我不熟悉协议和代表,因此建议存在概念上的问题。 Anny想法?
答案 0 :(得分:1)
首先,检查方法是否存在/由代理
实施是一种好习惯if ([delegate respondsToSelector:@selector(didSelectFileCardsContent:)])
[delegate didSelectFileCardsContent:fileCardToShow];
当你在自己的类中调用self.property时,不要使用它。当你可以直接调用它时,它会执行不必要的命令。
确保您在委托中实现了协议并实现了该方法。 确保将委托设置为自己。
答案 1 :(得分:0)
您只是没有将您的代理分配给任何内容,因此将消息发送给nil。