Сохранение данных в iOS5 Проблема - PullRequest
0 голосов
/ 05 января 2012

Я пытаюсь сохранить простые текстовые данные в своем приложении, используя этот код из «Начала разработки для iPhone»:

- (NSString *)dataFilePath { 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0];
    return [documentsDirectory stringByAppendingFormat:kFileName];
}

- (void)applicationWillTerminate:(NSNotification *)notification { 
    NSMutableArray *array = [[NSMutableArray alloc] init]; 
    [array addObject:field1.text]; 
    [array addObject:field2.text]; 
    [array addObject:field3.text]; 
    [array addObject:field4.text];

    [array writeToFile:[self dataFilePath] atomically:YES];
}

- (void)viewDidLoad { NSString *filePath = [self dataFilePath];
    if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) {
        NSArray *array = [[NSArray alloc] initWithContentsOfFile:filePath];
        field1.text = [array objectAtIndex:0];
        field2.text = [array objectAtIndex:1];
        field3.text = [array objectAtIndex:2];
        field4.text = [array objectAtIndex:4];
    }

    UIApplication *app = [UIApplication sharedApplication];
    [[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(applicationWillTerminate:)
                                             name:UIApplicationWillTerminateNotification
                                           object:app];

    [super viewDidLoad];
}

Этот код был написан и прекрасно работает для iOS 3, но не для iOS 5. ЕслиВы просто нажимаете кнопку «Домой» в симуляторе, чтобы закрыть ее, затем поднимаете панель многозадачности и нажимаете на значок приложения, данные перезагружаются очень хорошо.Но когда вы закрываете его, нажав кнопку «Домой», затем поднимаете панель многозадачности, а также закрываете ее и перезапускаете приложение, данные исчезают.Я не думаю, что приложение получает уведомление о том, что оно закрывается, когда вы закрываете его из панели многозадачности, но я не уверен, что я все еще новичок.

Я уверенчто мне просто нужно добавить дополнительную строку или 2 к коду, который у меня уже есть.Кто-нибудь знает, что это может быть?

Ответы [ 2 ]

3 голосов
/ 05 января 2012

Могу ли я предложить использовать класс NSUserDefaults?Это очень хорошо для хранения простых данных, таких как это.

Установка значения

NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:@"value" forKey:@"field"];
[defaults synchronize];

Получение значения

NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults];
NSString * value = [defaults objectForKey:@"field"]
2 голосов
/ 05 января 2012

Я предполагаю, что когда это было написано для iOS 3, applicationWillTerminate вызывалось при нажатии кнопки home.С iOS 5 это не так.Попробуйте переместить свой код в -applicationDidEnterBackground.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...