委托方法从未调用过

时间:2011-07-30 15:38:29

标签: iphone objective-c cocoa-touch

首先是我的代码:

@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想法?

2 个答案:

答案 0 :(得分:1)

首先,检查方法是否存在/由代理

实施是一种好习惯
if ([delegate respondsToSelector:@selector(didSelectFileCardsContent:)])
    [delegate didSelectFileCardsContent:fileCardToShow];

当你在自己的类中调用self.property时,不要使用它。当你可以直接调用它时,它会执行不必​​要的命令。

确保您在委托中实现了协议并实现了该方法。 确保将委托设置为自己。

答案 1 :(得分:0)

您只是没有将您的代理分配给任何内容,因此将消息发送给nil。