2016-09-25 1 views
0

Я извлекаю данные из основных данных. У меня есть атрибут, который является bool, который сохраняется с атрибутом времени. Мне нужно вернуть массив дат, где bool истинно. Я не могу заставить его работать, я либо получаю массив пустых дат, либо он падает.Swift fetchRequest с несколькими sortDescriptors и фильтром Bool

func datesWithCompleteHBI() -> [Date] { 

    let managedObjectContext = (UIApplication.shared.delegate as! AppDelegate).managedObjectContext 
    fetchRequest.resultType = .dictionaryResultType 
    fetchRequest.propertiesToFetch = ["savedTime", "harveyBradshawIndexComplete"] 

    let timeSort = NSSortDescriptor(key: "savedTime", ascending: false) 
    let hbiSort = NSSortDescriptor(key: "harveyBradshawIndexComplete", ascending: false) 
    fetchRequest.sortDescriptors = [timeSort, hbiSort] 

    let messageKey = true 
    fetchRequest.predicate = NSPredicate(format: "harveyBradshawIndexSaveLevel = %@", messageKey as CVarArg) 

    var dates = [Date]() 
    do { 

     let results = try managedObjectContext.fetch(fetchRequest) as! [[String:Date]] 

     dates = results.flatMap { $0["savedTime"]} 

    } catch let error as NSError { 
     print("Could not fetch \(error), \(error.userInfo)") 

    } 

print("hbi date array \(dates)") 
return dates 
} 
} 

ответ

0

Если вы возвращаете Date и Bool возвращаемое значение не может быть [[String:Date]]

let results = try managedObjectContext.fetch(fetchRequest) as! [[String:Any]] 

Вместо того, чтобы фильтровать элементы в коде добавить условие фильтра предиката

fetchRequest.predicate = NSPredicate(format: "harveyBradshawIndexSaveLevel = %@ AND savedTime == TRUE", messageKey as CVarArg) 

Теперь results содержит отфильтрованные элементы.

+0

Спасибо Я получаю сообщение об ошибке Не могу вызвать 'фильтр' с помощью списка аргументов типа '(([String: Any]) throws -> Bool)' – SashaZ

+0

Я обновил ответ. Фильтрация объектов в предикате является лучшим решением. – vadian

+0

Извините, это не сработало. Спасибо за помощь. Когда я это выясню, я отправлю ответ. – SashaZ

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