Я создал свой собственный Делегат для класса ObjC. Сам класс имеет дело с операциями Core Data. Методы делегатов используются для информирования других классов об изменениях, произошедших с хранилищем данных. Класс, который имеет дело с хранилищем данных, называется Datastore, а его делегат называется DatastoreDelegate. Мой UIViewController (ContactsViewController) реализует делегат.
Мой DatastoreDelegate объявлен следующим образом:
@class Datastore;
@protocol DatastoreDelegate <NSObject>;
@optional
- (void)didAddMessage:(Message *)message;
- (void)didUpdateContact:(Contact *)contact;
- (void)didAddContact:(Contact *)contact;
- (void)didUpdateContact:(Contact *)contact;
- (void)didDeleteContacts;
@end
Странно то, что мой код прекрасно работал с этими методами, за исключением метода [didAddMessage:]. Всякий раз, когда я пытаюсь вызвать этого делегата из класса Datastore, я получаю сообщение об ошибке от ContactsViewController. Ошибка говорит мне, что селектор [didAddMessage:] отсутствует в экземпляре ContactsViewController (нераспознанный селектор отправлен в экземпляр). Как может отсутствовать селектор, если он необязательный?
Я должен отметить, что мой класс Datastore - Singleton. Я не уверен, связано ли это как-то с этой проблемой.