更新がある場合やオブジェクトを追加する必要がある場合に通知を受けるために、2つのクラス間の委任を使用しています。最初のクラスはUITableViewControllerのサブクラスであり、2番目のクラスはUIViewControllerのサブクラスです。最初のクラスには、テーブルビューにオブジェクトを追加するためのプラス(addButton)があります。2番目のクラスは、追加ボタンが押されたときに最初のクラスが移動するビューです。したがって、View Controllerクラスで、.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が存在するため、メソッドに入ったかどうかを知ることができます。
//----------------------------------より実際のコード----------- ------------------- 2番目のクラス(ビューコントローラー)それぞれ.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");
}