ios - Sorting data by multiple key values -
i have basic list app 2 entities folder
, item
many relationship, folder subclass has function called itemsarray()
returns items in sorted array creationdate
displayed uitableview
.
item
has 2 properties called date
of type nsdate
, of type bool
called completed
. have created function can mark cell item object completed changes cell text color grey.
is there way can sort completed value ? e.g completed
value of true or false should separate completed items , sort creationdate
.
the end result should completed items @ bottom of uitableview
, in order of date non completed items in order of date. if completion higher priority date still orders creationdate
heres current function sort descriptor return array;
func itemsarray() -> [item] { let sortdescriptor = nssortdescriptor(key: "creationdate", ascending: true) return checklist.sortedarrayusingdescriptors([sortdescriptor]) as! [item] }
ps: tried work arounds such when marking completed updating date @ bottom. separates completed items non completed. when unmarking item remains @ bottom isn't long term solution may want change sorting alphabetical order , completion.
you can add nssortdescriptor
function:
func itemsarray() -> [item] { let sortbycompleted = nssortdescriptor(key: "completed", ascending: true) let sortbycreationdate = nssortdescriptor(key: "creationdate", ascending: true) return checklist.sortedarrayusingdescriptors([sortbycompleted, sortbycreationdate]) as! [item] }
play ascending
value true
first or false
first. or swifty way of doing things:
func itemsarray() -> [item] { return checklist.sort { if $0.completed == $1.completed { return $0.creationdate < $1.creationdate } return $0.completed < $1.completed } }
Comments
Post a Comment