我有两个视图控制器,HomeViewController
和AddViewController
。 HomeViewController
是AddViewController
的代表。iOS代理取消呼叫失败
问题是,当我点击AddViewController
中的“取消”按钮时,回到委托的回调似乎不会执行。在症状上,取消按钮的行为就好像它甚至没有连接。以编程方式,断点似乎表明控制离开了cancelButton
方法,但从未达到addViewControllerDidCancel
。
我相信一切正确布线,和这里的相关代码:
从AddViewController.h:
#import <UIKit/UIKit.h>
#import "WMDGCategory.h"
#import "WMDGActivity.h"
@class HomeViewController;
@protocol AddViewControllerDelegate <NSObject>
-(void) addViewControllerDidSave;
-(void) addViewControllerDidCancel:(WMDGActivity *) activityToDelete;
@end
@interface AddViewController : UIViewController <UIPickerViewDataSource,UIPickerViewDelegate>
@property (nonatomic, weak) id <AddViewControllerDelegate> delegate;
从HomeViewController.h:
@interface HomeViewController : UITableViewController <UITableViewDataSource,UITableViewDelegate,AddViewControllerDelegate>
从HomeViewController.m:
-(void) addViewControllerDidSave
{
NSManagedObjectContext *localContext = [NSManagedObjectContext MR_contextForCurrentThread];
[localContext MR_saveToPersistentStoreAndWait];
[self.navigationController dismissViewControllerAnimated:YES completion:nil];
[self refreshData];
}
-(void) addViewControllerDidCancel:(WMDGActivity *) activityToDelete
{
[activityToDelete MR_deleteEntity];
[self.navigationController dismissViewControllerAnimated:YES completion:nil];
[self refreshData];
}
而且从AddViewController.m:
- (IBAction)cancelButton:(UIBarButtonItem *)sender
{
[self.delegate addViewControllerDidCancel:self.thisActivity];
}
可有人发现我的错误?
谢谢!响应
编辑回答1所示:
其实,我在HomeViewController做这在我的prepareFroSegue方法:
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
NSManagedObjectContext *localContext = [NSManagedObjectContext MR_contextForCurrentThread];
if ([[segue identifier] isEqualToString:@"addModal"])
{
UINavigationController *navController = (UINavigationController *)segue.destinationViewController;
AddViewController *avc = (AddViewController *)navController.topViewController;
avc.delegate = self;
WMDGActivity *addedActivity = (WMDGActivity *)[WMDGActivity MR_createInContext:localContext];
avc.thisActivity = addedActivity;
}
}
您是否使用segue来显示AddViewController? – danielM
是的,模态赛格。 – rattletrap99