我在使用核心数据插入项目后尝试重新加载我的表视图控制器。我正在使用故事板来呈现我的模态视图控制器并设置目标视图控制器的委托以准备segue但我相信这是问题,因为我的didAddCollection方法没有被触发。我不确定我在这里缺少什么。我使用iOS TableView Reload after dismissing modal作为我当前代码的基础。
在我的CCNewCollectionViewController.h
中@protocol NewCollectionDelegate <NSObject>
-(void) didAddCollection;
@end
@interface CCNewCollectionViewController : UIViewController {
id delegate;
}
@property (nonatomic, retain) id <NewCollectionDelegate> delegate;
在我的CCNewCollectionViewController.m
中@implementation CCNewCollectionViewController
@synthesize delegate;
// save data
[self.delegate didAddCollection];
// dismiss view controller
在我的CollectionTableViewController.m
中@interface CollectionTableViewController () <NSFetchedResultsControllerDelegate, NewCollectionDelegate>
-(void) didAddCollection {
[self.tableView reloadData];
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
[[segue destinationViewController] setDelegate:self];
}
答案 0 :(得分:1)
一个非常愚蠢的错误。在设置目标视图控制器的委托时,我实际上是在设置UINavigationController的委托而不是CCNewCollectionViewController。
UINavigationController *nc = [segue destinationViewController];
CCNewCollectionViewController *vc = nc.viewControllers[0];
[vc setDelegate:self];
我将prepareForSegue代码更改为此,它解决了我的问题!
答案 1 :(得分:0)
不确定这是否能解决您的问题,但我认为创建一个弱委托属性更为典型。无需合成。
@interface CCNewCollectionViewController : UIViewController
@property (nonatomic,weak) id <NewCollectionDelegate> delegate;
...
@end
有关使用协议的详细信息,请参阅here。