Swift/IOS: 访问存储在 NSSet 中的对象
Swift/IOS: Accessing objects that are stored inside NSSet
我有两个模态,Patient 和 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) 上,我有主细节布局,主控部分为 'Patients',细节部分为 'PatientDocuments'。我想要的是在选择其中一名患者时显示患者的相关文件。
使用 prepareforSegue 我可以将选定的患者传递给 documentsViewcontroller(处理文档的控制器)。在 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,患者与另一个包含不同类型文档的类似对象相关,称为问卷)
您需要将集合排序成一个数组,以便您可以有条理地显示它。您可以直接执行此操作(使用 sortedArrayUsingDescriptors:
),或者您可以使用带有排序描述符的获取请求(最好传递给 NSFetchedResultsController
,这样您就不需要将所有文档加载到内存中同时监控变化)。
如果您的文档有时间戳或类似的排序依据,那将是最好的,因为这对用户来说很有意义。你可以按id排序,这可能是一样的。
我有两个模态,Patient 和 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) 上,我有主细节布局,主控部分为 'Patients',细节部分为 'PatientDocuments'。我想要的是在选择其中一名患者时显示患者的相关文件。
使用 prepareforSegue 我可以将选定的患者传递给 documentsViewcontroller(处理文档的控制器)。在 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,患者与另一个包含不同类型文档的类似对象相关,称为问卷)
您需要将集合排序成一个数组,以便您可以有条理地显示它。您可以直接执行此操作(使用 sortedArrayUsingDescriptors:
),或者您可以使用带有排序描述符的获取请求(最好传递给 NSFetchedResultsController
,这样您就不需要将所有文档加载到内存中同时监控变化)。
如果您的文档有时间戳或类似的排序依据,那将是最好的,因为这对用户来说很有意义。你可以按id排序,这可能是一样的。