Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование iOS/iPhone
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.90/10: Рейтинг темы: голосов - 10, средняя оценка - 4.90
krugolet
0 / 0 / 0
Регистрация: 21.05.2012
Сообщений: 5
1

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

22.05.2012, 19:34. Просмотров 1797. Ответов 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 файл?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.05.2012, 19:34
Ответы с готовыми решениями:

При первом запуске программно переключиться на второй view controller (его не видно)
Добрый день. Есть 2 view controller'а. Во втором текстовое поле. Если оно не...

Как сохранить числовые данные, чтобы они были доступны при следующем запуске приложения?
Когда обдумывал High score для игры, столкнулся с проблемой: переменные каждый...

Как сохранить содержимое listView и прочитать при следующем запуске (mp3-плеер)
Здравствуйте, такой вопрос: есть простой мп3 плеер, который содержит Listview,...

Как сохранить состояние контролов окна при его закрытии (только на время работы программы)
Есть приложение. При нажатии кнопки открывается дочерняя форма с настройками:...

Сохранить программно созданные Image, чтобы при следующем запуске програмы они были на своем месте
Все привет. Помогите советом. Создаю в Run-Time N-ное количество TImage, вот...

2
zulkis
684 / 611 / 43
Регистрация: 13.01.2011
Сообщений: 1,724
23.05.2012, 14:07 2
Цитата Сообщение от krugolet Посмотреть сообщение
self.viewController = [[ViewController alloc]init];
self.viewController = [NSKeyedUnarchiver unarchiveObjectWithFile: path];
Что Вы этим хотели сделать?)
0
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 новый адрес.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.05.2012, 15:04

Сохранить данные StringGrid при закрытии и восстановить их при запуске программы
Здравствуйте, уважаемые программисты! Пытаюсь сделать так, чтобы введенные...

Как сохранить фоновый цвет компонента, расположенного на форме при новом запуске (отладке) приложения
Доброго времени суток! Возникла одна небольшая проблема. Нужно сделать так,...

Как создать Button в Form-e и сохранить его, так чтобы при следующем открытии Form кнопка, т.е. Button существовал на форме?
Доброе время суток! У меня возник такой вопрос. Как создать Button в Form-e и...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

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