2016-02-17 2 views
-1

Я извлекаю данные с прошлой недели с помощью CoreData. Все работает отлично в течение нескольких дней, когда хранятся некоторые данные. Однако, когда данные не хранятся, программа выходит из строя. Как я могу справиться с этой ошибкой?Обработка ошибок при запросе на выбор и NSpredicate

for i in 0...6 { // Get every day in the past week 
     let appDel = (UIApplication.sharedApplication().delegate as! AppDelegate) 
     let context: NSManagedObjectContext = appDel.managedObjectContext 
     let request = NSFetchRequest(entityName: "Pulser") 
     request.returnsObjectsAsFaults = false 

     let calendar = NSCalendar.currentCalendar() 
     let now = NSDate() 
     let beginningOfToday = calendar.startOfDayForDate(now) 
     let previousDay = calendar.startOfDayForDate(calendar.dateByAddingUnit(.Day, value: -i, toDate: beginningOfToday, options: [])!) 
     let previousPreiviousDay = calendar.startOfDayForDate(calendar.dateByAddingUnit(.Day, value: -i - 1 , toDate: beginningOfToday, options: [])!) 

     request.predicate = NSPredicate(format:"(date >= %@) AND (date < %@)", previousPreiviousDay, previousDay) 

     do { 
      let results = try context.executeFetchRequest(request) as! [Pulser] 
      pulseArray.append(meanValue(results)) // if more than one value stored for each day, take the mean value of it 

     } 
     catch let error as NSError { 
      print(error) 
     } 
    } 
+2

Проверьте, не являются ли 'результаты 'пустым ...? (Пустой набор результатов не является ошибкой.) –

+2

Проверьте, нет ли 'результатов'. И не очень эффективно получить один и тот же контекст, календарь и 'now' 6 раз в цикле повтора. – vadian

+0

Используйте 'NSCompoundPredicate', чтобы избежать 6 наборов, чтобы сделать только один, как было предложено @vadian – Larme

ответ

0

Он работает как очарование сейчас, спасибо.

if results.count > 0 { 
      pulseArray.append(meanValue(results)) 

    } 
Смежные вопросы