【发布时间】:2017-04-08 04:01:21
【问题描述】:
我有 Pet 可以有多个事件的实体:
public class Pet: NSManagedObject {
@NSManaged var dbName: String
@NSManaged var events: NSSet? // 1-to-many relationship with events
}
public class Event: NSManagedObject {
@NSManaged var key: String
@NSManaged var date: Int64
}
我已将事件设置为根据其日期编制索引。我创建了一个函数,可以返回给定宠物的所有事件。
func fetchEventsForPet(pet: String) -> [Event]? {
let request = NSFetchRequest<NSFetchRequestResult>(entityName: Pet.entityName)
let predicate = NSPredicate(format: "dbName == %@", pet)
request.predicate = predicate
request.fetchLimit = 1
do {
let result = try self.fetch(request) as? [Pet]
if let pets = result {
for pet in pets {
if let events = pet.events {
if let evts = events.allObjects as? [Event] {
return evts // Return pets events
}
}
}
}
} catch {}
return nil
}
如何修改此函数以仅返回最后一个事件(基于date 的最新事件)?我必须每次都获取所有事件还是有更快的方法来做到这一点?
【问题讨论】:
-
添加一个排序描述符,以便获取按日期降序排序。如果提取限制为 1,您将只获得一个对象,即具有最大日期的对象。
-
所以即使我正在获取
Pet实体,我仍然可以将排序描述符添加到它与Event的关系中?