核心数据中的快速循环...

fse*_*lva 5 core-data swift

我需要循环进入核心数据来比较两个值,我尝试用for ... in来做.

我正在使用fetchedResultController我的核心数据创建我的请求:

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
}
Run Code Online (Sandbox Code Playgroud)

并在我的cellForRowAtIndexPath声明我的用户对象:let user = frcu.objectAtIndexPath(indexPath) as! User

这是用户类:

import Foundation
import CoreData

@objc(User)
class User: NSManagedObject {

    @NSManaged var id: String
    @NSManaged var name: String
    @NSManaged var task: NSSet

}
Run Code Online (Sandbox Code Playgroud)

一旦我在那里,我尝试循环用户获取指定的ID:

for userId in user.id{
      if (userId == task.responsable){
            responsible = user.name
        }      
}
Run Code Online (Sandbox Code Playgroud)

任务是let task = frc.objectAtIndexPath(indexPath) as! Task,我可以根据需要添加相关代码.

但它不起作用,我有错误Could not find an overload for "==" that accepts the supplied argumentsif (userId == task.responsable)

我是好人,我做得不好?

我只是尝试比较task.responsable与每个user.id,如果我得到一个匹配的值,我打印相应的user.name ..这是一个非常常见的传统ORM,但我被卡住...

ps:我的最终目标是:

比较task.responsable字符串与每个user.id,如果我得到一个匹配的值,打印相应user.nameuser.id

这是任务实体,它是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
}
Run Code Online (Sandbox Code Playgroud)

pba*_*sdf 10

问题出在你的for-in循环中. user(小写u)是一个单独的User对象 - 因此for-in循环不会遍历所有User对象.因为user.id是a String,循环依次遍历该字符串的每个字符.

要遍历所有User对象,请使用获取的结果控制器fetchedObjects.

for user in frcu.fetchedObjects! as! [User] {
    if (user.id == task.responsable){
        responsible = user.name
    }      
}
Run Code Online (Sandbox Code Playgroud)