i need loop core data compare 2 values, try for...in.
i'm using fetchedresultcontroller create request on core data:
func getfetchedresultscontrolleruser() -> nsfetchedresultscontroller{ frcu = nsfetchedresultscontroller(fetchrequest: taskfetchrequestuser(), managedobjectcontext: context!, sectionnamekeypath: nil, cachename: nil) return frcu } func taskfetchrequestuser() -> nsfetchrequest { let fetchrequest = nsfetchrequest(entityname: "user") let sortdescriptor = nssortdescriptor(key: "name", ascending: true) fetchrequest.sortdescriptors = [sortdescriptor] return fetchrequest } and on cellforrowatindexpath declare user object: let user = frcu.objectatindexpath(indexpath) as! user
this user class:
import foundation import coredata @objc(user) class user: nsmanagedobject { @nsmanaged var id: string @nsmanaged var name: string @nsmanaged var task: nsset } once i'm there, try loop on user specified id:
for userid in user.id{ if (userid == task.responsable){ responsible = user.name } } task let task = frc.objectatindexpath(indexpath) as! task, can add code if needed.
but doesn't work, have error could not find overload "==" accepts supplied arguments line if (userid == task.responsable)
am on way, doing bad?
i try compare task.responsable every user.id , if matching value, print corresponding user.name.. it's common thing traditional orm, there i'm stuck...
ps: final aim is:
compare task.responsable string every user.id , if matching value, print corresponding user.name of user.id
this task entity , it's frc:
import foundation import coredata @objc(task) class task: nsmanagedobject { @nsmanaged var context: string @nsmanaged var date: string @nsmanaged var detail: string @nsmanaged var folder: string @nsmanaged var id: string @nsmanaged var responsable: string @nsmanaged var status: string @nsmanaged var summary: string @nsmanaged var user: user } var frc : nsfetchedresultscontroller = nsfetchedresultscontroller() func getfetchedresultscontroller(string) -> nsfetchedresultscontroller{ frc = nsfetchedresultscontroller(fetchrequest: taskfetchrequest(folder), managedobjectcontext: context!, sectionnamekeypath: nil, cachename: nil) return frc } func taskfetchrequest(string) -> nsfetchrequest { let fetchrequest = nsfetchrequest(entityname: "task") let predicate = nspredicate(format: "folder = %@", folder) let sortdescriptor = nssortdescriptor(key: "summary", ascending: true) fetchrequest.predicate = predicate fetchrequest.sortdescriptors = [sortdescriptor] return fetchrequest }
the problem lies in for-in loop. user (lower case u) single user object - for-in loop not iterating through user objects. because user.id string, loop iterating through each character of string in turn.
to iterate through of user objects, use fetched results controller's fetchedobjects.
for user in frcu.fetchedobjects! as! [user] { if (user.id == task.responsable){ responsible = user.name } }
Comments
Post a Comment