【问题标题】:Swift/IOS: Accessing objects that are stored inside NSSetSwift/IOS:访问存储在 NSSet 中的对象
【发布时间】:2015-03-26 19:22:55
【问题描述】:

我有两个模态,PatientPatientDocument 如下所示

@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)上,我有主细节布局,主页面上有“Patients”,细节部分有“PatientDocuments”。我想要的是在选择其中一名患者时显示患者的相关文档。

使用 prepareforSegue 我可以将选定的患者传递给文档视图控制器(处理文档的控制器)。在 cellForRowAtIndexPath 中显示文档时,我在检索该患者的相关文档时遇到了麻烦。

有没有办法单独检索与所选患者相关的文档?我尝试打印患者体内的 NSSet documents,它给了我以下输出。

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,患者与另一个包含不同类型文档的类似对象相关,称为问卷)

【问题讨论】:

    标签: ios uitableview swift core-data nsset


    【解决方案1】:

    您需要将集合排序到一个数组中,以便您可以有组织地显示它。您可以直接执行此操作(使用sortedArrayUsingDescriptors:),或者您可以使用带有排序描述符的获取请求(最好传递给NSFetchedResultsController,这样您就不需要同时将所有文档加载到内存中并且变化受到监控)。

    如果您的文档有一个可以排序的时间戳或类似的东西,那将是最好的,因为这对用户来说是有意义的。你可以按id排序,这可能相当于同一件事。

    【讨论】:

    • 感谢您的想法,我做了一些更改并得到了我需要的结果:D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-10
    • 1970-01-01
    相关资源
    最近更新 更多