如何使用从 Core Data 创建的 NSSet

pdo*_*oak 3 core-data nsset swift

我有以下核心数据模型: 在此处输入图片说明 在此处输入图片说明

其中人员到代码是一对多的关系。

我有一个函数,它返回一个 Person 记录,如果代码person.codes返回与该 Person 关联的所有代码的 NSSet。我遇到的问题是如何使用 NSSet。

person.codes.allObjects.first 返回此数据:

<Codes: 0x60000213cb40> (entity: Codes; id: 0xb978dbf34ddb849 <x-coredata://A2B634E4-E136-48E1-B2C5-82B6B68FBE44/Codes/p1> ; data: {
    code = 4LQ;
    number = 1;
    whosAccount = "0xb978dbf34ddb869 <x-coredata://A2B634E4-E136-48E1-B2C5-82B6B68FBE44/Person/p1>";
})
Run Code Online (Sandbox Code Playgroud)

我想如果我使用person.codes.allObjects.firsttype Codes,我将能够访问codeandnumber元素,但我收到一个错误:error: value of type 'Any?' has no member 'number'

另外,我如何在此数据集中搜索特定代码或数字。

我很欣赏这可能是一个简单的问题,但搜索并阅读了文档无济于事。我怀疑可能基础知识还不够。

更新

我有一个包含以下代码的 CoreDataHandler 类:

class CoreDataHandler: NSObject {
    //static let sharedInstance = CoreDataHandler()

    private static func getContext() -> NSManagedObjectContext {
        let appDelegate = NSApplication.shared.delegate as! AppDelegate

        return appDelegate.persistentContainer.viewContext
    }

    static func fetchPerson() -> [Person]? {
        let context = getContext()

        do {
            let persons: [Person] = try context.fetch(Person.fetchRequest())
            return persons
        } catch {
            return nil
        }
    }
Run Code Online (Sandbox Code Playgroud)

我可以使用以下方法获取一个人:

let row = personTableView.selectedRow
let person = CoreDataHandler.fetchPerson()?[row]
Run Code Online (Sandbox Code Playgroud)

vad*_*ian 6

Core Data 支持广泛的原生 Swift 类型。

声明codesSet<Codes>Person类。

它比typeless 方便得多NSSet
你得到一个强类型,你可以申请像所有的原生功能filtersort等等。没有类型转换。