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

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

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

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

22.05.2012, 19:34. Просмотров 1625. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как сохранить состояние приложения и восстановить его при следующем запуске (Программирование iOS):

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

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

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

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

Сохранить программно созданные Image, чтобы при следующем запуске програмы они были на своем месте - Delphi
Все привет. Помогите советом. Создаю в Run-Time N-ное количество TImage, вот код: procedure TfMain.CreateTech(Tech: string); begin ...

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
zulkis
682 / 609 / 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 новый адрес.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.05.2012, 15:04
Привет! Вот еще темы с ответами:

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

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

Как развернуть окно стороннего приложения при его запуске? - Visual Basic .NET
Здравствуйте. При запуске ресурса System.Diagnostics.Process.Start(&quot;chrome&quot;, &quot;http://...&quot;) окно может быть не развернутым. Как...

Можно ли при гибернации сохранить состояние нескольких приложений, но при этом не сохранять состояние системы? - Windows 7
можно сохранить состояние нескольких приложений, но при этом не сохранять состояние системы? убил логон при помощи logon workshop`a, а на...


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

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

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