Форум программистов, компьютерный форум CyberForum.ru

Как сохранить состояние приложения и восстановить его при следующем запуске - Программирование iOS/iPhone

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 5.00
krugolet
0 / 0 / 0
Регистрация: 21.05.2012
Сообщений: 5
22.05.2012, 19:34     Как сохранить состояние приложения и восстановить его при следующем запуске #1
Здравствуйте!
Я использую <NSCoding>, реализую необходимые методы, сохраняю в файл типа plist, в application didFinishLaunchingWithOptions: делаю так:
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    // Override point for customization after application launch.
    //self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController" bundle:nil] autorelease];
    
    if ([[NSFileManager defaultManager] fileExistsAtPath:[NSString stringWithFormat:@"%@/Documents/archive.data", NSHomeDirectory()]]) 
    {       
        //[self loadChanges];
        NSString* path = [NSString stringWithFormat:@"%@/Documents/archive.plist", NSHomeDirectory()];
        
        self.viewController = [[ViewController alloc]init]; 
        self.viewController = [NSKeyedUnarchiver unarchiveObjectWithFile: path];
    }
    else {
        self.viewController = [[ViewController alloc]init ];
    }
    
    
   // [self.window addSubview:[self.viewController view]];
    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];
    return YES;
}
Не работает. При следующем запуске не загружает ничего...
Пользовался этой статьёй (она более полная из всех, что я находил):
Подскажите, пожалуйста, что не так я делаю. Возможно я не понял сериализацию - пожалуйста объясните. Может оно неправильно архивирует - как проверить plist файл?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.05.2012, 19:34     Как сохранить состояние приложения и восстановить его при следующем запуске
Посмотрите здесь:

Как сохранить числовые данные, чтобы они были доступны при следующем запуске приложения? Objective-C
Автозапуск приложения при включении компа Objective-C
Objective-C Приложение вылетает при запуске
Остановка потоков при закрытии приложения
Выводится картинка на view сразу при запуске программы и только один раз
Objective-C Запуск приложения при трехкратном нажатии кнопки Home
Как сохранить данные при переходе на другой ViewController?
При первом запуске программно переключиться на второй view controller (его не видно)
Действие при закрытии приложения
Текст в таблице при первом запуске
Как сохранить Array в NSUserDefaults? Swift
Как восстановить developer account apple?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zulkis
 Аватар для zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
23.05.2012, 14:07     Как сохранить состояние приложения и восстановить его при следующем запуске #2
Цитата Сообщение от krugolet Посмотреть сообщение
self.viewController = [[ViewController alloc]init];
self.viewController = [NSKeyedUnarchiver unarchiveObjectWithFile: path];
Что Вы этим хотели сделать?)
krugolet
0 / 0 / 0
Регистрация: 21.05.2012
Сообщений: 5
23.05.2012, 15:04  [ТС]     Как сохранить состояние приложения и восстановить его при следующем запуске #3
Я хотел присвоить viewContoller объект, который разархивируется из сохраненных данных.

Я понял,

Objective-C
1
self.viewController = [[NSKeyedUnarchiver unarchiveObjectWithFile: self.archivePath]retain];
Сейчас уже все получается. Оказывается, в методах encodeWithCoderNSCoder *)aCoder нужно было прописать [super encodeWithCoder: aCoder]

Objective-C
1
2
3
4
5
6
7
8
-(void) encodeWithCoder:(NSCoder *)aCoder
{
    [super encodeWithCoder: aCoder];
 
    [aCoder encodeObject:self.viewColors forKey:@"viewColors"];
    [aCoder encodeObject:self.mainView forKey:@"mainView"];
    [aCoder encodeObject:self.myView forKey:@"myView"];
}
Теперь другая проблема, в объекте mainView есть поле delegate, в котором сохраняется адрес viewContoller. Я инициализирую его в методе viewContoller:
Objective-C
1
2
3
4
5
6
- (id) init
{
...
self.mainView = [[MyView alloc] initWithFrame:[[UIScreen mainScreen ]bounds] andDelegate: self];
...
}
Так вот, после сериализации не работают реакции на кнопки, таргетом которых являются методы во viewContoller. Как я понял, при сериализации сохраняется адрес старого viewContoller, а при новом запуске у нового viewContoller новый адрес.
Yandex
Объявления
23.05.2012, 15:04     Как сохранить состояние приложения и восстановить его при следующем запуске
Ответ Создать тему
Опции темы

Текущее время: 00:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru