0

Die AddCityViewController wird mit den entsprechenden Textfeldern wiederhergestellt. Die Schaltflächen 'Abbrechen' und 'Speichern' enthalten Aufrufe an den Delegaten. Der Modalansicht-Controller wird wiederhergestellt, aber die Schaltflächen "Speichern" und "Abbrechen" aktivieren die Delegate-Methode nicht. Alle View-Controller wurden innerhalb des Storyboards erstellt.Schwacher Referenzdelegierter nicht wiederhergestellt

Schaltfläche Abbrechen ruft nur die Delegate-Methode auf, wenn die Statuswiederherstellung nicht implementiert wird.

Ich möchte die Delegierten auch aufgerufen werden, wenn es gebraucht wird für staatliche Sanierung

// 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]; 
} 

Die CityTableViewController ist der Delegierte für die 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 

...

Die unten delegieren Methode funktioniert perfekt, mit Ausnahme von STATE RESTORATION. Während der Statuswiederherstellung wird diese Methode nie aufgerufen.

+1

Es ist ziemlich seltsam als Teil des archivierten Objektgraphen Archivierung der Delegierten werden. Normalerweise etwas, das Sie neu erstellen würden, wenn die Benutzeroberfläche verfügbar wird. Allgemein. – bbum

+0

Ich kann den Delegaten nicht neu erstellen, wenn der Ansichtscontroller wiederhergestellt wird. Bei Zustandswiederherstellung kehrt der View-Controller mit seinem Textfield-Text zurück, aber self.delegate = (null). –

Antwort

0

Sie versuchen, Ihren Delegaten erneut zu codieren, anstatt ihn zu dekodieren.

Ihren Code ändern:

-(void)decodeRestorableStateWithCoder:(NSCoder *)coder 
{ 
    self.delegate = [coder decodeObjectForKey:@"restoreDelegate"]; 
    _cityNameLabel.text = [coder decodeObjectForKey:@"restoreCountyLabelText"]; 

    [super decodeRestorableStateWithCoder:coder]; 
} 
+0

danke für Ihre richtige Antwort! –