2016-05-10 52 views
0

我想在Core Data(保存日期数组)中为日期属性制作一个NSDates数组。所以我可以在日历中显示有天保存项目的日子。我曾尝试与下面的代码,但得到一个错误:Swift从ManagedObjectContext获取日期数组FetchRequest

终止应用程序由于未捕获的异常“NSInvalidArgumentException”,理由是:“无法解析格式字符串‘savedTime’

func datesWithSavedData() -> [NSDate] { 
    let fetchRequest = NSFetchRequest(entityName: "UserData") 
    fetchRequest.predicate = NSPredicate(format: "savedTime'") 
    fetchRequest.sortDescriptors = [NSSortDescriptor(key: "savedTime", ascending: false)] 
    do { 
    let results = 
     try managedObjectContext.executeFetchRequest(fetchRequest) as? [NSDate] 
    selectedDates = results! 
    print(selectedDates) 
    } catch let error as NSError { 
    print("Could not fetch \(error), \(error.userInfo)") 
    } 

    return selectedDates as! [NSDate] 
} 
+0

'NSPredicate(format:“savedTime'”)'没有任何意义。谓词用于过滤结果集,那么你想实现什么?如果你想要所有的条目,那么省略谓词。 –

+0

我已经尝试过,并得到“致命错误:意外地发现零,同时解开一个可选值”的错误行上selectedDates =结果! – SashaZ

+0

日期和我将它们保存为nsdate。 – SashaZ

回答

2

一种解决方法是告诉核心数据返回字典数组而不是[NSManagedObject]例如

func datesWithSavedData() -> [NSDate] { 
    let fetchRequest = NSFetchRequest(entityName: "UserData") 
    fetchRequest.sortDescriptors = [NSSortDescriptor(key: "savedTime", ascending: false)] 
    fetchRequest.resultType = .DictionaryResultType 
    fetchRequest.propertiesToFetch = ["savedTime"] 
    do { 
    let results = try managedObjectContext.executeFetchRequest(fetchRequest) as! [[String:NSDate]] 
    return results.map { $0["savedTime"] as! NSDate } 

    } catch let error as NSError { 
    print(error) 
    return [NSDate]() 
    } 
} 
+0

这工作,并提供nsdates完美的词典!另一种解决方案是从核心数据中输出整个实体的输出,而不仅仅是日期。 – SashaZ