2013-03-05 26 views
0

我在两个类之间使用委派以便在有任何更新或需要添加对象的情况下收到通知。第一个类是UITableViewController的子类,第二个类是UIViewController的子类。第一个类有一个plus(addButton)将对象添加到它的表视图。第二类是第一次导航到按下添加按钮时的视图。因此,在视图控制器类别i增加了一个协议在h文件:我的自定义代理不起作用

@protocol ViewControllerDelegate <NSObject> 

- (void) addViewControllerDelegate:(ViewController *)controller didUpdateEvent:(Event *) event; 

@end 

和我添加委托@propety:在.m文件

@property (weak, nonatomic) id <SSAddViewControllerDelegate> delegate; 

加入在IBAction为方法以下当保存按钮按下的被触发:

[self.delegate addViewControllerDelegate:self didUpdateEvent: event]; 

现在要回表视图控制器类,在.h文件中我添加和.m文件添加以下方法:

- (void) addViewControllerDelegate:(ViewController *)controller didUpdatEvent:(Event *)event{ 
    [self saveNewEntry:event]; 
    NSLog(@"DELEGATE"); 
} 

问题:它不工作。虽然我想我做了一切应该做的事情。

注:我改变了这里的类的名字,所以没有我没有我的类叫做ViewController。 saveNewEntry用于将事件对象添加到我的数组,并且nslog在那里,以便知道它是否输入了该方法。

// ---------------------------------- more actual code ------- ----------------------- 二等(视图控制器)h和.M分别

@class Course; 
@class SSAddViewController; 

@protocol SSAddViewControllerDelegate; 

@interface SSAddViewController : UIViewController <UITextFieldDelegate> 
@property (nonatomic, retain) NSManagedObjectContext *managedObjectContext; 
@property (weak, nonatomic) id <SSAddViewControllerDelegate> delegate; 
@end 

@protocol SSAddViewControllerDelegate <NSObject> 

- (void) addViewControllerDelegate:(SSAddViewController *)controller didUpdateCourse:(Course *) course; 

@end 
@class Course; 
@class SSAddViewController; 

@protocol SSAddViewControllerDelegate; 

@interface SSAddViewController : UIViewController <UITextFieldDelegate> 
@property (nonatomic, retain) NSManagedObjectContext *managedObjectContext; 
@property (weak, nonatomic) id <SSAddViewControllerDelegate> delegate; 
@end 

@protocol SSAddViewControllerDelegate <NSObject> 

- (void) addViewControllerDelegate:(SSAddViewController *)controller didUpdateCourse:(Course *) course; 

@end 

- (void) saveNewEntry 
{ 
    SSAppDelegate *appDelegate = [UIApplication sharedApplication].delegate; 
    NSManagedObjectContext *context = [appDelegate managedObjectContext]; 
    Course *course = (Course *) [NSEntityDescription insertNewObjectForEntityForName:@"Course" inManagedObjectContext:context]; 
    NSLog(@"YES"); 
    [course setCourseName:self.nameTextField.text]; 
    [course setCourseCredits:[NSNumber numberWithInt:[self.creditstextField.text intValue]]]; 
    [course setCourseChapters:[NSNumber numberWithInt:[self.chaptersTextField.text intValue]]]; 

    if (hasChanges) { 
     [self.delegate addViewControllerDelegate:self didUpdateCourse:course]; 
    } 
} 

第一类(表视图)。 h和.m分别为:

@interface SSCoursesViewController : UITableViewController <SSAddViewControllerDelegate> 




- (void) addViewControllerDelegate:(SSAddViewController *)controller didUpdateCourse:(Course *)course{ 
    [self saveNewEntry:course]; 
    NSLog(@"DELEGATE"); 
} 
+0

你有没有设置代表? – 2013-03-05 19:02:45

+0

你的意思是我添加的那个? @property委托? – user1938695 2013-03-05 19:18:25

+0

是的,在你的代码的某个地方,你需要设置它,否则,什么都不会发生 – 2013-03-05 19:27:32

回答

0

你的SSAddViewController在哪里创建?你使用segue作为故事板的一部分,还是直接创建它?

,如果您使用的是SEGUE,你需要在你SSCoursesViewController

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    SSAddViewController *ssavc = (SSAddViewController *)[segue destinationViewController]; 

    ssavc.delegate = self; 

} 

如果您直接创建SSAddViewController,你可以直接将其设置为实现prepareForSeque。

我现在不是坐在我的Mac上,但上面的代码大致是正确的。

+0

是的SSAddViewController是一个视图控制器,它是由模态segue创建的。我会尝试。 – user1938695 2013-03-05 20:15:07

0

您是否真的在您的代码SSAddViewControllerDelegate = self;中设置了?

+0

毫米..没有什么代表你的意思>我输入一个ID? – user1938695 2013-03-05 19:10:37

+0

@ user1938695他的意思是你是否将视图控制器的'delegate'属性设置为某个值? – rmaddy 2013-03-05 19:24:52

+0

哦不,我没有。如果我应该这样做,我需要这样做?在它的二传手?并以什么价值? – user1938695 2013-03-05 19:27:19