По этой ссылке: Как архивировать два объекта с помощью NSKeyedArchiever? Я могу заархивировать массив и одноэлементный объект. Я могу заархивировать и правильно разархивировать его в didFinishLaunchingWithOptions.
Однако мой одноэлементный объект не сохраняется после делегата приложения. В следующем контроллере представления синглтон-переменные возвращаются к значениям по умолчанию, хотя в 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]);
// выход: алфавит
Затем я выделяю / инициализирую viewController и устанавливаю его в качестве корневого контроллера представления для моего контроллера навигации:
navController = [[UINavigationController alloc] initWithRootViewController:viewController];
В viewController -> viewWillAppear,
Я вызываю функцию сортировки:
[самостоятельная сортировка ...];
А в функции сортировки я вызываю синглтон-класс:
Синглтон *singleton = [Singleton sharedSingleton];
Но теперь NSLog(@"singleton sort: %@", [singleton sort]);
// вывод: количество НЕ алфавит
Я могу опубликовать свой синглтон-код, но я знаю, что он работает. Фактически, в моем контроллере представления настроек, если я изменю переменную [singleton sort], она сохранится во всех контроллерах представления.
Меня смущает, почему мой одноэлементный объект не сохраняется от делегата приложения до моих контроллеров представления. Любые советы / подсказки приветствуются.
Спасибо !!!
РЕДАКТИРОВАТЬ: реализация класса Singleton
In 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"];
}