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

时间:2015-03-26 19:22:56

标签: ios uitableview swift core-data nsset

我有两个模态,患者 PatientDocument ,如下所示

@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)上我有一个主要的细节布局与患者'在Master和' PatientDocuments'在详细信息部分。我想要的是在选择一名患者时显示患者的相关文件。

使用 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>)
)})

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

1 个答案:

答案 0 :(得分:0)

您需要将该集合排序为一个数组,以便您可以以有条理的方式显示它。您可以直接执行此操作(使用sortedArrayUsingDescriptors:),也可以使用带有排序描述符的获取请求(最好传递给NSFetchedResultsController,这样您就不需要将所有文档加载到内存中了同时监测变化情况。)

最好是您的文档有时间戳或类似的,您可以排序,因为这对用户有意义。你可以按id排序,这可能相同。