Как сохранить данные приложения будильника?

Я делаю приложение для будильника для iPhone, и мне было интересно, как лучше всего сохранить мои данные. Я пытался реализовать CoreData, но это не работает. Я посмотрел и обнаружил, что для использования CoreData вы должны установить флажок «Использовать CoreData для хранения» при создании нового проекта в Xcode, чего я не сделал. Вместо этого я создал приложение на основе представлений. Могу ли я по-прежнему реализовывать CoreData или мне следует использовать что-то еще, например, plist или SQLite.


person Souljacker    schedule 28.08.2011    source источник
comment
Если это небольшой объем данных, plist может подойти, в противном случае используйте CoreData.   -  person zaph    schedule 28.08.2011
comment
Я просто хочу сохранить объект будильника для каждого будильника, который может создать пользователь, например дату пожара, метку и интервал повторения. Как вы думаете, plist сможет справиться с этим?   -  person Souljacker    schedule 28.08.2011
comment
Конечно, все еще можно использовать основные данные. Просто создайте новый проект с выбранным параметром основных данных и посмотрите на проект, особенно на делегат приложения. Вы можете копировать и вставлять большое количество основного кода данных в другой проект.   -  person HeikoG    schedule 28.08.2011
comment
Я думаю, что plist будет в порядке для этого   -  person HeikoG    schedule 28.08.2011
comment
Если вы используете CoreData, обязательно изначально установите управление версиями.   -  person zaph    schedule 28.08.2011
comment
Вы всегда можете внедрить Core Data, даже если вы не выбрали его при первом создании проекта. Но вам придется вручную импортировать инфраструктуру Core Data и добавить все необходимые методы Core Data и переменные экземпляра. Именно поэтому рекомендуется просто добавить его в самом начале. Если вы добавите новый проект с Core Data, вы измените только файлы AppDelegate, и вы сможете внести все коррективы там, и приложение заработает быстро!   -  person Ladislav    schedule 28.08.2011
comment
Я думаю, что, возможно, я выберу plist, потому что мне все равно не нужно сохранять так много данных. Но если я использую plist, будут ли проблемы с памятью?   -  person Souljacker    schedule 28.08.2011


Ответы (1)


Что бы я сделал, просто сохранил данные в NSUserDefaults как массив словарей.

Например, допустим, у вас есть:

NSDictionary *alarmOne = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:fireDateOne, labelOne, repeatIntervalOne, nil] forKeys:[NSArray arrayWithObjects:@"fireDate", @"label", @"repeatInterval"]];
NSDictionary *alarmTwo = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:fireDateTwo, labelTwo, repeatIntervalTwo, nil] forKeys:[NSArray arrayWithObjects:@"fireDate", @"label", @"repeatInterval"]];
NSArray *alarmsToBeSaved = [NSArray arrayWithObjects:alarmOne, alarmTwo, nil];
//save the alarms
[[NSUserDefaults standardUserDefaults] setObject:alarmsToBeSaved forKey:@"MyAlarms"];

//get alarms back from NSUserDefaults
NSArray *alarms = [[NSUserDefaults standardUserDefaults] objectForKey:@"MyAlarms"];
for (NSDictionary *alarm in alarms){
    NSLog(@"label of alarm: %@", [alarm objectForKey:@"label"]); //output alarm labels for example!
}

Вы также можете сохранить этот массив на диск в каталоге документов приложения...

Базовые данные обычно лучше, когда у вас есть большие наборы данных, которые вы хотите быстро извлечь из базы данных (поиск) и лучше контролировать использование памяти.

Как добавить новый будильник?

NSDictionary *alarmThree = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:fireDateThree, labelThree, repeatIntervalThree, nil] forKeys:[NSArray arrayWithObjects:@"fireDate", @"label", @"repeatInterval"]];

NSMutableArray *newAlarms = [NSMutableArray arrayWithObjects:[[NSUserDefaults standardUserDefaults] objectForKey:@"MyAlarms"]];
//add the new alarm Dict
[newAlarms addObject:alarmThree];
//save the array
[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithArray:newAlarms] forKey:@"MyAlarms"];
person Ladislav    schedule 28.08.2011
comment
Итак, как мне сохранить данные, добавленные пользователями? - person Souljacker; 28.08.2011
comment
Добавлен способ сохранения третьего будильника - person Ladislav; 28.08.2011