我正在两个类之间使用委托,以便在有任何更新或需要添加对象时收到通知。第一个类是UITableViewController的子类,第二个类是UIViewController的子类。第一个类有一个加号(addButton)来向它的表视图添加对象。第二个类是按下添加按钮时第一个导航到的视图。所以在视图控制器类中,我在.h文件中添加了一个协议:
@protocol ViewControllerDelegate <NSObject>
- (void) addViewControllerDelegate:(ViewController *)controller didUpdateEvent:(Event *) event;
@end
我添加了一个委托@propety:
@property (weak, nonatomic) id <SSAddViewControllerDelegate> delegate;
.m文件中的在按下保存按钮时触发的IBAction方法中添加了以下内容:
[self.delegate addViewControllerDelegate:self didUpdateEvent: event];
现在回到表视图控制器类,在我添加的.h文件中,在.m文件中添加了以下方法:
- (void) addViewControllerDelegate:(ViewController *)controller didUpdatEvent:(Event *)event{
[self saveNewEntry:event];
NSLog(@"DELEGATE");
}
问题:它不起作用。虽然我想我做了应该做的一切。
注意:我在这里更改了类的名称,所以没有我没有名为ViewController的类。 saveNewEntry用于将事件对象添加到我的数组中,并且nslog就在那里,以便知道它是否输入了该方法。
// ----------------------------------更多实际代码-------- ---------------------- 第二类(视图控制器).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 :(得分:0)
您是否实际设置了代码SSAddViewControllerDelegate = self;
?
答案 1 :(得分:0)
您的SSAddViewController在哪里创建?您是否将segue用作故事板的一部分,还是直接创建它?
如果您使用的是segue,则需要在SSCoursesViewController中实现prepareForSeque
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
SSAddViewController *ssavc = (SSAddViewController *)[segue destinationViewController];
ssavc.delegate = self;
}
如果您直接创建SSAddViewController,可以直接设置它。
我现在不是坐在我的Mac上,但上面的代码大致正确。