【问题标题】:Using objects as CoreData object field type使用对象作为 CoreData 对象字段类型
【发布时间】:2020-07-07 15:38:36
【问题描述】:

是否可以将CoreData对象字段类型配置为对象?例如“CustomTimeObject”:

import Foundation
import CoreData


extension someObject{

    @nonobjc public class func fetchRequest() -> NSFetchRequest<SomeObject> {
        return NSFetchRequest<SomeObject>(entityName: "SomeObject")
    }

    @NSManaged public var id: UUID
    @NSManaged public var startTime: CustomTimeObject


}

我的意图是在调用 Core Data 时使用谓词,以便检索具有匹配“startTime”特定 CustomTimeObject 字段的对象,例如(即使不工作):

            var customTime = [CustomTimeObject]
            guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else { return }
              

            let managedContext = appDelegate.persistentContainer.viewContext
              
     
    
            let fetchRequest:NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "SomeObject")


            fetchRequest.predicate = NSPredicate(format: "startTime.hour > %@ AND startTime.minutes < %@", argumentArray: [8, 11])


              do
              {
                  let results = try managedContext.fetch(fetchRequest)
              
                
                for result in results as! [NSManagedObject] {
                        var timeObject = CustomTimeObject()
                        timeObject.hour=result.value(forKey: "startTime.hour")
                        timeObject.minutes=result.value(forKey: "startTime.minutes")
                        customTime.append(timeObject)
                }
                
              
     
                 
              }
                
              catch
              {
                  print(error)
              }

【问题讨论】:

    标签: ios swift core-data nspredicate


    【解决方案1】:

    您应该将 CustomTimeObject 作为另一个实体,并将其作为您的第一个 someObject 中的关系。查看 Apple 的此链接:Creating Managed Object Relationships

    【讨论】:

    • 你能提供一个代码实现的例子吗?
    • 你能在对象(在关系中)字段上设置 NSPredicate,比如 NSPredicate(format: "startTime.hour > %@ AND startTime.minutes
    • 是的,你应该能够做到这一点,看看这个链接的例子:stackoverflow.com/questions/28158610/…
    猜你喜欢
    • 2012-09-05
    • 1970-01-01
    • 2021-09-21
    • 2020-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-12
    • 1970-01-01
    相关资源
    最近更新 更多