swift - Fetch last record of Entities NSSet? -
i have pet entities can have multiple events:
public class pet: nsmanagedobject { @nsmanaged var dbname: string @nsmanaged var events: nsset? // 1-to-many relationship events } public class event: nsmanagedobject { @nsmanaged var key: string @nsmanaged var date: int64 } i've set events indexed based on date. i've made function returns events given pet.
func fetcheventsforpet(pet: string) -> [event]? { let request = nsfetchrequest<nsfetchrequestresult>(entityname: pet.entityname) let predicate = nspredicate(format: "dbname == %@", pet) request.predicate = predicate request.fetchlimit = 1 { let result = try self.fetch(request) as? [pet] if let pets = result { pet in pets { if let events = pet.events { if let evts = events.allobjects as? [event] { return evts // return pets events } } } } } catch {} return nil } how modify function return last event (the lastest event based on date)? have fetch events each time or there faster way this?
your entity class definitions imply not have inverse relationship event pet. should create 1 (there very, few occasions better off without inverse). can fetch events directly, rather fetching pets , using events relationship. assuming name inverse relationship "pet", use predicate this:
let predicate = nspredicate(format: "pet.dbname == %@", pet) you can apply sort descriptors , fetch limit return recent event given pet name.
Comments
Post a Comment