AddCityViewController
восстановлен с соответствующими текстовыми полями. Кнопки «Отмена» и «Сохранить» содержат вызовы делегата. Контроллер модального просмотра восстанавливается, но кнопки «Сохранить» и «Отмена» не активируют метод делегата. Все диспетчеры представлений созданы внутри раскадровки.слабый ссылочный делегат не восстановлен
// AddCityViewController.h
@class City;
#import <UIKit/UIKit.h>
@protocol addCityDelegate;
@interface AddCityViewController : UIViewController
@property(nonatomic, weak) id <addCityDelegate> delegate;
@property(nonatomic,strong)NSManagedObjectContext *context;
@end
@protocol addCityDelegate
- (void)save: (City *)controller withBool:(BOOL)saveStatus;;
@end
Кнопка «Отмена» вызывает только метод делегата, когда State Restoration не выполняется.
Я хочу делегат также вызывается, когда его необходимо для восстановления состояния
// AddCityViewController.m
- (IBAction)cancelButton:(UIBarButtonItem *)sender {
[self.delegate save:nil withBool:false];
}
#pragma mark - encodeRestorable and decodeRestorable
- (void)encodeRestorableStateWithCoder:(NSCoder *)coder
{
[super encodeRestorableStateWithCoder:coder];
[coder encodeObject:self.delegate forKey:@"restoreDelegate"];
[coder encodeObject:self.cityNameLabel.text
forKey:@"restoreCountyLabelText"];
}
-(void)decodeRestorableStateWithCoder:(NSCoder *)coder
{
[coder encodeObject:self.delegate forKey:@"restoreDelegate"];
_cityNameLabel.text = [coder decodeObjectForKey:@"restoreCountyLabelText"];
[super decodeRestorableStateWithCoder:coder];
}
CityTableViewController
является делегатом для AddCityTableView
// CityTableViewController.m
#import "CityTableViewController.h"
#import "AddCityViewController.h"
#import "City.h"
#import "County.h"
@interface CityTableViewController()<addCityDelegate>
@property(nonatomic,strong)NSFetchedResultsController *fetchedResultsController;
@end
#pragma mark - AddConjugations Delete
...
Ниже Делегат метод отлично работает, за исключением STATE RESTORATION. Во время восстановления состояния этот метод никогда не называется.
- (void)save: (AddCityViewController *)saveNewCity withBool:(BOOL)saveStatus
{
if (saveStatus) {
...
}
Это довольно странно, чтобы архивировать делегат как часть архивного графа объектов. Как правило, это то, что вы воссоздаете, когда пользовательский интерфейс станет доступным. В общем. – bbum
Я не знаю, как воссоздать делегата, когда контроллер просмотра будет восстановлен. При восстановлении состояния контроллер представления возвращается с текстом текстового поля, но self.delegate = (null). –