2015-04-04 3 views
0

У меня был странный опыт сегодня днем, и я не могу сказать, в чем проблема. Я разрабатываю приложение для iPhone с помощью Swift, и сегодня я провел его на дороге для пробного прогона. До сих пор я тестировал его только при подключении к Mac.Основные объекты данных удалены, когда iPhone разбился

Приложение отслеживает местоположения и сохраняет это в Core Data при прохождении пользователем. Все было хорошо, и данные были спасены. Это было до тех пор, пока телефон не разбился, и Core Data, похоже, опустели. Данные, безусловно, сохранялись до того, как телефон разбился, поскольку я накладываю сохраненный маршрут на карту, и это определенно отображалось. И функция удаления данных определенно не вызывалась, так как я не получал доступ к единственному контроллеру вида, который его вызывает.

Мой вопрос в том, имеет ли кто-нибудь еще такой опыт или есть известная проблема, при которой основные данные могут быть удалены при сбое телефона?

Edit:

Это код, который я использую для сохранения основных данных:

var context = (UIApplication.sharedApplication().delegate as AppDelegate).managedObjectContext! 
     var savePosition = NSEntityDescription.insertNewObjectForEntityForName("Positions", inManagedObjectContext: context) as Positions 

     savePosition.poi = false 
     savePosition.time = currentTime 
     savePosition.direction = currentDirection 
     savePosition.latitude = currentLatitude 
     savePosition.longitude = currentLongitude 
     savePosition.game = currentGame 

     context.save(nil) 

Я пропускаю шаг?

+1

Данные кэшируются, и вы можете без проблем работать с ним. Но он сохраняется только в постоянном хранилище данных, когда вы вызываете 'saveContext()' – zisoft

+0

Когда вы говорите, что вы сохранили, что вы хотите сохранить в постоянном хранилище, я предполагаю, но какой магазин? Это определенно не является нормальным для сохранения данных, чтобы потеряться при сбое. Я этого не видел. Согласитесь с выше, звучит как saveContext не происходит. – RegularExpression

+0

Я добавил свой код. Я пропустил saveContext()? Я думал, что мой context.save() выполняет работу? –

ответ

1

С помощью этой функции в AppDelegate вы обнаруживаете ошибки и отображаете их в UIAlertController. Это может помочь выявить, что произошло с вашими данными.

func saveContext() { 
    var error: NSError? = nil 

    if !managedObjectContext.hasChanges { 
     return 
    } 

    if managedObjectContext.save(&error) { 
     return 
    } 


    // Error occured 
    let alertController = UIAlertController(
     title: NSLocalizedString("Error", comment: ""), 
     message: "\(error?.localizedDescription)\n\(error?.userInfo)", 
     preferredStyle: .Alert 
    ) 

    let defaultAction = UIAlertAction(
     title: "Ok", 
     style: .Default, 
     handler: nil) 

    alertController.addAction(defaultAction) 

    self.navigationController?.topViewController.presentViewController(alertController, animated: true, completion: nil) 
} 
+0

Zisoft, это здорово. Спасибо вам за помощь. Я добавил код, и я буду следить за проблемами. –

+0

Удачи! И не забудьте заменить все вхождения 'context.save (nil)' на 'appDelegate.saveContext()' ;-) – zisoft