我需要循环进入核心数据来比较两个值,我尝试用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 arguments行if (userId == task.responsable)
我是好人,我做得不好?
我只是尝试比较task.responsable与每个user.id,如果我得到一个匹配的值,我打印相应的user.name ..这是一个非常常见的传统ORM,但我被卡住...
ps:我的最终目标是:
比较task.responsable字符串与每个user.id,如果我得到一个匹配的值,打印相应user.name的user.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)
| 归档时间: |
|
| 查看次数: |
4744 次 |
| 最近记录: |