xcode iOS CoreData 简单关系数据检索

Posted

技术标签:

【中文标题】xcode iOS CoreData 简单关系数据检索【英文标题】:xcode iOS CoreData simple relational data retrieval 【发布时间】:2012-08-27 04:18:32 【问题描述】:

我的 coredata 模型中有两个表(有更多但保持示例简单)员工和部门。一个员工属于一个部门,一个部门包含许多员工。以下是表定义:

Employee
================
employeeID int32
firstName string
lastName string
departmentID int32

Department
================
departmentID int32
departmentName string

我只是想知道检索所有员工及其部门名称的最简洁方法是什么?

谢谢

【问题讨论】:

【参考方案1】:

您似乎在设计您的架构,就好像它是一个数据库。请不要这样做。这与 CoreData 的工作方式没有必要和对立。您应该摆脱您的 ID 字段。只需在模型中声明适当的关系,然后为员工获取部门所需要做的就是:

myEmployee.departmentName

获取所有员工的方法如下:

NSManagedObjectContext *moc = [self managedObjectContext];
NSEntityDescription *entityDescription = [NSEntityDescription
    entityForName:@"Employee" inManagedObjectContext:moc];
NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease];
[request setEntity:entityDescription];

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc]
    initWithKey:@"firstName" ascending:YES];
[request setSortDescriptors:[NSArray arrayWithObject:sortDescriptor]];
[sortDescriptor release];

NSError *error = nil;
NSArray *array = [moc executeFetchRequest:request error:&error];
if (array == nil)

    // Deal with error...

这是从文档中获取的。如果您使用的是 ARC,请相应地更改代码。

【讨论】:

如果我需要将我的核心数据备份到“云”而不是重新存储它怎么办?您如何使用关系巧妙地序列化 coredata 数据库?我可以很容易地看到如何使用外键将我当前的 coredata 数据库序列化为 xml/JSON。 另外,这实际上只是从 .net 应用程序的转换。因此,实施新的关系设置会带来更多好处。 在这种情况下,您可能需要考虑 CoreData 是否适合您。将 SQlite 与 FMDB 之类的包装器一起使用可能更合适。 只是为了澄清我最后的陈述,序列化 CoreData 与完整的关系并不是我所听到的微不足道的。在 SQLite 末尾(有些人也使用 mysql2)可能是您最好的选择。 如果我确实想使用 coredata,最好的方法是什么?

以上是关于xcode iOS CoreData 简单关系数据检索的主要内容,如果未能解决你的问题,请参考以下文章

xcode/ios/coredata:添加新记录后,tableview 中的最后一条记录显示两次

iOS / iPhone CoreData 关系

新项目中的 CoreData

CoreData 简单地使用

Step by Step Do IOS Swift CoreData Simple Demo

Xcode 没有生成正确的 coredata 模型文件