このリンクの後に:How do I archive two objects using NSKeyedArchiever?配列とシングルトンオブジェクトを実現できます。 FinishedLaunchingWithOptionsで私はそれを達成し、正しく守ることができます。シングルトンは、アプリケーションデリゲートから別のビューコントローラに継承されません
しかし、私のシングルトンオブジェクトは、アプリケーションデリゲートを超えて持続しません。次のView Controllerでは、didFinishLaunchingWithOptionsでNSLogを実行して検証したにもかかわらず、シングルトン変数がデフォルト値に戻ります。ここでは例があり、アプリケーションdidFinishLaunchingWithOptions
で
:
Singleton *singleton = [Singleton sharedSingleton];
NSData *data = [NSData dataWithContentsOfFile:path];
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
singleton = [unarchiver decodeObjectForKey:@"singleton"];
[unarchiver finishDecoding];
NSLog(@"singleton sorting after decode: %@", [singleton sort]);
//出力に含ま:
はその後、私はALLOCアルファベット/のViewControllerを初期化し、私のナビゲーションコントローラのルートビューコントローラとして設定します: ViewControllerで
navController = [[UINavigationController alloc] initWithRootViewController:viewController];
- > viewWillAppear、
私はソート関数を呼び出します: [self sort ...];
やソート機能では、私は、シングルトンクラスを呼び出す: シングルトン*singleton = [Singleton sharedSingleton];
しかし、今、NSLog(@"singleton sort: %@", [singleton sort]);
//出力:量
をアルファベットないで、私は私のシングルトンのコードを投稿することができますが、私はそれが動作を知っています。実際、私の設定ビューコントローラでは、[シングルトンソート]変数を変更すると、すべてのビューコントローラを通して保持されます。
これは、私のシングルトンオブジェクトがアプリケーションデリゲートからビューコントローラに永続しない理由を混乱させます。任意のヒント/ヒントが評価されます。
ありがとうございました!
EDIT:シングルトンクラスの実装Singleton.mで
:あなたのコードで
static Singleton *shared = NULL;
+ (id)sharedSingleton
{
@synchronized(self)
{
if (!shared || shared == NULL)
{
// allocate the shared instance, because it hasn't been done yet
NSLog(@"Allocating Singleton...");
shared = [[Singleton alloc] init];
}
return shared;
}
}
- (id)init
{
if (self = [super init])
{
sort = [[NSString alloc] initWithString:@"amount"];
showTutorial = YES;
}
return self;
}
-(id)initWithCoder:(NSCoder *)aDecoder
{
[super init];
[self setSort:[aDecoder decodeObjectForKey:@"sort"]];
[self setShowTutorial:[aDecoder decodeBoolForKey:@"showTutorial"]];
return self;
}
-(void)encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeObject:sort forKey:@"sort"];
[aCoder encodeBool:showTutorial forKey:@"showTutorial"];
}
'initWithCoder:'メソッドをどのように実装しましたか? –
@Deepak。私は私のシングルトンクラスのコードを含めるように質問を更新しました。本当にありがとう!!! – okysabeni