Я использую делегирование между двумя классами, чтобы получать уведомления в случае, если есть обновление или объект должен быть добавлен. первый класс является подклассом 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];
}
}
первый класс (вид таблицы). ч и .m соответственно:
@interface SSCoursesViewController : UITableViewController <SSAddViewControllerDelegate>
- (void) addViewControllerDelegate:(SSAddViewController *)controller didUpdateCourse:(Course *)course{
[self saveNewEntry:course];
NSLog(@"DELEGATE");
}
Вы когда-нибудь задавали делегат? –
Вы имеете в виду тот, который я добавил? делегат @property? – user1938695
да, где-то в вашем коде вам нужно что-то установить, иначе ничего не произойдет –