我在两个类之间使用委派以便在有任何更新或需要添加对象的情况下收到通知。第一个类是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");
}
你有没有设置代表? – 2013-03-05 19:02:45
你的意思是我添加的那个? @property委托? – user1938695 2013-03-05 19:18:25
是的,在你的代码的某个地方,你需要设置它,否则,什么都不会发生 – 2013-03-05 19:27:32