在没有迭代的情况下获取fetchedObjects中的特定对象

时间:2016-02-10 18:57:41

标签: ios swift core-data

我的应用有一个自定义对象SSSchedule,我坚持使用CoreData,sortDescriptor "date"SSSchedule有一个变量var date : NSDate?)。是否有更有效的方法来查找具有特定SSSchedule的特定date对象,而不是遍历fetchedObjects数组,检查每个schedule.date == myDate as! NSDate

我的应用经常引用fetchedObjects,所以每次fetchedObjects保存时,我都会设想不断将[String : SSSchedule]映射到类型context的字典(例如)会影响表现......

3 个答案:

答案 0 :(得分:2)

编写一个获取请求,以从数据存储区返回与特定date匹配的对象。如果你保持一致,那么根据你所写的内容,你将获得一个包含一个元素的数组。

让核心数据为您搜索。这就是它的用途。

答案 1 :(得分:0)

我认为如果你使用一个有{Dictionaries字典的plist。它可能更符合您的需求。

第一个词典将有一个(日,月,年)元组的键,可以很容易地从NSDate中提取。和一个字典的值,其中键是(小时,分钟)的元组,也是从NSDate中提取的,是String的值,这是当时要完成的任务。

这样,如果您有特定日期,那么该日期是在O(1)时间复杂度中仅访问您在该特定日期期间所拥有的任务和事件的关键。 现在,如果您想知道在特定时间是否有某些东西,您可以以类似的方式访问它。该方法应该返回String?。如果在特定时间有任务,它将返回任务,否则它将返回nil,这意味着您此时自由。

这就是数据结构的外观[(Day, Month,Year):[(Hours,Minutes):String]]

关于从NSDate

中提取组件
let date = NSDate()
let calendar = NSCalendar.currentCalendar()
let components = calendar.components(.CalendarUnitHour |.CalendarUnitMinute 
|.CalendarUnitYear|.CalendarUnitMonth|.CalendarUnitDay, fromDate: date)
let day = components.day
let month = components.month
let year = compononets.year    
let hour = components.hour
let minutes = components.minutes  

答案 2 :(得分:0)

使用filter()构建一个包含符合条件的任何对象的新数组:

let newArray = fetchedObjects.filter() { $0.date == myDate as! NSDate }

然后检查newArray的计数并相应地处理 - 除非你知道日期是唯一的,否则数组中可能有零个,一个或多个元素。