У меня есть приложение, которое хранит системные события в базе данных Core Data. Для сохранения я использую MagicalRecord.
Итак, в моем классе регистратора в init
у меня есть:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleDidFinishLaunchingNotification) name:UIApplicationDidFinishLaunchingNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleWillTerminateNotification) name:UIApplicationWillTerminateNotification object:nil];
В функциях дескриптора я храню простой объект со свойством text и timestamp:
- (void)handleDidFinishLaunchingNotification
{
[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) {
DBMessage *dbMessage = [DBMessage createEntityInContext:localContext];
dbMessage.text = @"Did finish launching";
dbMessage.timestamp = [NSDate date];
}];
}
- (void)handleWillTerminateNotification
{
[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) {
DBMessage *dbMessage = [DBMessage createEntityInContext:localContext];
dbMessage.text = @"Will terminate";
dbMessage.timestamp = [NSDate date];
}];
}
Когда я открываю и закрываю (без сбоев) приложение несколько раз, в моей БД я вижу записи «Завершил запуск» (более одной, поэтому я уверен, что приложение было закрыто, а не только перемещено в BG), но ни один из " Прекратится».
Я был бы менее удивлен, если бы событие запуска было пропущено, потому что я мог ожидать, что метод init
будет вызван после публикации уведомления.
Что я могу сделать, чтобы сохранить события завершения?