Swift/IOS:访问存储在NSSet中的对象

Swift/IOS:访问存储在NSSet中的对象,ios,uitableview,swift,core-data,nsset,Ios,Uitableview,Swift,Core Data,Nsset,我有两种情态动词,病人和病人文件如下 @objc (Patient) class Patient: NSManagedObject { @NSManaged var id: Int64 @NSManaged var fullName: String @NSManaged var lastVisitDate: NSTimeInterval @NSManaged var documents: NSSet } @objc (PatientDocument) class Pat

我有两种情态动词,病人病人文件如下

@objc (Patient)
class Patient: NSManagedObject {
@NSManaged var id: Int64
    @NSManaged var fullName: String
    @NSManaged var lastVisitDate: NSTimeInterval
    @NSManaged var documents: NSSet
}

@objc (PatientDocument)
class PatientDocument: NSManagedObject {

    @NSManaged var id: Int64
    @NSManaged var documentType: String
    @NSManaged var documentUUID: String
    @NSManaged var patient: Patient
}
我为患者和文档插入了一些虚拟数据,并将它们链接起来,患者可以有多个文档(一对多关系)。在我的应用程序(IOS)上,我有主细节布局,主细节部分有“患者”和“患者文档”。我想要的是在选择一个患者时显示患者的相关文档

使用prepareforSegue我可以将所选患者传递给documentsViewcontroller(处理文档的控制器)。在cellForRowAtIndexPath中显示文档时,我在检索该患者的相关文档时遇到问题

是否有方法仅检索与选定患者相关的文档?。我试着打印患者内部的NSSet文档,它给了我以下输出

Optional(Relationship 'documents' on managed object (0x79807af0) <Patient: 0x79807af0> (entity: Patient; id: 0x79808e70 <x-coredata://A7367643-744D-417B-BECE-734260B90D9B/Patient/p2> ; data: {
    careTeamMember = "0x79786680 <x-coredata://A7367643-744D-417B-BECE-734260B90D9B/Account/p2>";
    documents =     (
        "0x7967d260 <x-coredata://A7367643-744D-417B-BECE-734260B90D9B/PatientDocument/p12>",
        "0x7968c0e0 <x-coredata://A7367643-744D-417B-BECE-734260B90D9B/PatientDocument/p8>",
        "0x7967d540 <x-coredata://A7367643-744D-417B-BECE-734260B90D9B/PatientDocument/p9>"
    );
    fullName = Patient3;
    id = 2;
    isCPO = 1;
    lastVisitDate = "2001-01-01 00:08:55 +0000";
    questionnaire =     (
        "0x79689e00 <x-coredata://A7367643-744D-417B-BECE-734260B90D9B/PatientQuestionnaire/p2>",
        "0x7968f440 <x-coredata://A7367643-744D-417B-BECE-734260B90D9B/PatientQuestionnaire/p5>",
        "0x796a72a0 <x-coredata://A7367643-744D-417B-BECE-734260B90D9B/PatientQuestionnaire/p3>"
    );
}) with objects {(
    <PatientDocument: 0x796a6300> (entity: PatientDocument; id: 0x7967d260 <x-coredata://A7367643-744D-417B-BECE-734260B90D9B/PatientDocument/p12> ; data: <fault>),
    <PatientDocument: 0x79694bf0> (entity: PatientDocument; id: 0x7968c0e0 <x-coredata://A7367643-744D-417B-BECE-734260B90D9B/PatientDocument/p8> ; data: <fault>),
    <PatientDocument: 0x7967f410> (entity: PatientDocument; id: 0x7967d540 <x-coredata://A7367643-744D-417B-BECE-734260B90D9B/PatientDocument/p9> ; data: <fault>)
)})
可选(托管对象(0x79807af0)上的关系“文档”(实体:患者;id:0x79808e70;数据:{
careTeamMember=“0x79786680”;
文件=(
“0x7967d260”,
“0x7968c0e0”,
“0x7967d540”
);
全名=3;
id=2;
isCPO=1;
lastVisitDate=“2001-01-01 00:08:55+0000”;
问卷=(
“0x79689e00”,
“0x7968f440”,
“0x796a72a0”
);
})有物体{(
(实体:PatientDocument;id:0x7967d260;数据:),
(实体:PatientDocument;id:0x7968c0e0;数据:),
(实体:PatientDocument;id:0x7967d540;数据:)
)})

(忽略输出中的问卷NSSet,患者与另一个包含不同类型文档的类似对象相关,称为问卷)

您需要将该集合排序为数组,以便以有组织的方式显示它。您可以直接这样做(使用
sortedrayingdescriptor:
),也可以使用带有排序描述符的提取请求(最好传递给
NSFetchedResultsController
,这样您就不需要同时将所有文档加载到内存中,并且可以监视更改)


最好是您的文档有一个时间戳或类似的东西,您可以根据它进行排序,因为这对用户来说是有意义的。您可以按id排序,这可能相当于相同的内容。

感谢您的想法,我做了一些更改,得到了我需要的结果:D