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

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

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

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

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

谢谢

【问题讨论】:

    标签: iphone ios xcode ipad core-data


    【解决方案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,最好的方法是什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-31
    相关资源
    最近更新 更多