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

Программирование iOS/iPhone

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 5.00
krugolet
0 / 0 / 0
Регистрация: 21.05.2012
Сообщений: 5
#1

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

22.05.2012, 19:34. Просмотров 1596. Ответов 2
Метки нет (Все метки)

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

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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     Как сохранить состояние приложения и восстановить его при следующем запуске
Ответ Создать тему
Опции темы

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