У меня есть модальный контроллер представления, который создает изменения основных данных в своем собственном контексте, и когда я нажимаю кнопку «« «« Сделано », он сохраняет изменения (отправляет уведомление об изменении слияния), уведомляет делегата и увольняет.Вызов метода на делегат после задержки, от объекта в конце его жизненного цикла
Моя проблема в том, что мне нужно, чтобы делегат получил сообщение после того, как мой основной контекст слился с изменениями контекста редактирования. Я хочу, чтобы вызов делегата состоялся в следующем цикле выполнения, но у меня возникают проблемы с временем жизни объекта. Я подумал о следующем:
- Сделать звонок
[delegate performSelector:withObject:afterDelay:]
Однако, похоже, что это сообщение не распознается. Мой делегат соответствует протоколуNSObject
, но не включает селектор выполнения с задержкой. - Создайте метод в моем контроллере:
informDelegateWithObject:
, который вызывает метод делегата и вызывает этот метод после задержки. То есть[self performSelector:@selector(informDelegateWithObject:) withObject:.. afterDelay:..]
. Однако это может сработать, так как мой диспетчер просмотров отклоняется, если задержка составляет несколько секунд, тогда она была бы освобождена из памяти и не вызвала бы сбой при вызове? - Создать экземпляр
NSInvocation
. Однако я подумал об этом, какова продолжительность жизни этого объекта? Если я создам его с помощью[NSInvocation invocationWithMethodSignature:]
, то не будет ли объектNSInvocation
автореализован, а не для следующего цикла цикла? Не говоря уже о нескольких секундах. И поскольку мой диспетчер модального просмотра отклоняется и освобождается, я не могу сохранить объект вызова в моем контроллере представления.
Любые предложения?
Спасибо за ваш ответ. У меня на самом деле есть другой шаблон, это довольно сложное приложение, и мой EVC (редактор вида редактирования) вызывается из нескольких мест и, следовательно, может иметь несколько делегатов. Контекст и экономия - все это аккуратно обработано из EVC. Я просто хочу узнать, как лучше всего вызывать методы после задержки с проблемами времени жизни объекта, описанными в вопросе. Есть идеи? –
Вы все еще можете использовать мой шаблон. В myViewController: didFinishSaving: реализация вы можете вызвать метод на myViewController ... например [myViewController saveAndMergeWithMOC: self.managedObjectContext], а затем уволить. Говоря о вызове селекторов с задержкой ... Я ничего не вижу, используя performSelector: withObject: afterDelay :. Если вы хотите подавить предупреждение компилятора, вы можете определить протокол, который включает этот метод. В любом случае он должен работать, потому что UIViewController наследует от NSObject и @selector (performSelector: withObject: afterDelay :) будет найден по времени выполнения Objective-C – muccy