0

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

[キャンセル] ボタンは、状態の復元が実装されていない場合にのみデリゲート メソッドを呼び出します。

状態の復元に必要なときにデリゲートも呼び出されるようにしたい

// 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) {
   ...
 }
4

1 に答える 1

0

デリゲートをデコードする代わりに、再度エンコードしようとしています。

コードを次のように変更します。

-(void)decodeRestorableStateWithCoder:(NSCoder *)coder {
    self.delegate = [coder decodeObjectForKey:@"restoreDelegate"];
    _cityNameLabel.text = [coder decodeObjectForKey:@"restoreCountyLabelText"];
    [super decodeRestorableStateWithCoder:coder];
}
于 2017-01-06T18:39:48.167 に答える