2014-02-28 61 views
0

我有两个视图控制器,HomeViewControllerAddViewControllerHomeViewControllerAddViewController的代表。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; 
    } 

} 
+0

您是否使用segue来显示AddViewController? – danielM

+0

是的,模态赛格。 – rattletrap99

回答

3

你丢失的分配你的AddViewController实例的委托对象,从什么我可以看到它仍然nil

myAddViewController.delegate = self; // 'self' is an example, should be myHomeViewController instance 

编辑:
你在你的代码中调用这个:

[self.delegate addViewControllerDidCancel:self.thisActivity]; 

问问自己是什么delegate价值?你已经声明了,是的,但是你没有设置它的值,所以它必须是nil。所以,当你实例化你的AddViewController时,你必须使用我之前写的代码来设置委托。

+0

一个非常普遍的问题。 – nhgrif

+0

对不起,我不太关注。你可以修改我包含的代码吗? – rattletrap99

+0

查看编辑答案 – Merlevede