【问题标题】:Core Data & Generating Model Entities核心数据和生成模型实体
【发布时间】:2010-11-27 14:48:28
【问题描述】:

标准新手问题。我为 iOS 应用程序创建了一个数据模型。我可以使用 NSEntityDescription 对象从各种视图中创建、更新和删除模型中的实体。

假设我有一个从 fetch 请求返回的可变对象数组。当我没有从实体模型生成的对象定义时,如何循环遍历每一个?生成的对象定义是指数据模型包中描述的实体的标头和主体类定义。

【问题讨论】:

    标签: objective-c xcode core-data


    【解决方案1】:

    所有 CoreData 实体都派生自 NSManagedObject,并且所有来自这些实体的数据库数据都可以通过键值编码访问。您需要知道的最低限度可以从模型中获得。您不一定需要标题。

    例如一个实体 PersonEntityNameEntity 有关系,属性为 firstname

    NSArray *results = [managedObjectContext queryEntityForName:@"PersonEntity" predicateFormat:nil argumentArray:nil];
    
    for(NSManagedObject *object in results)
    {
    NSString *name = [object valueForKeyPath:@"nameobject.firstname";
    [self doSomething:name];
    }
    

    queryEntityForName 是我自己的类别。您可能会发现它很有用。

    @implementation NSManagedObjectContext(VMQueryAdditions)
    
    -(NSArray *)queryEntityForName:(NSString *)name predicateFormat:(NSString *)pstring argumentArray:(NSArray *)arr
    {
        NSEntityDescription *entity = [NSEntityDescription entityForName:name inManagedObjectContext:self];
        NSFetchRequest *fetch = [[[NSFetchRequest alloc] init] autorelease];
    
        [fetch setEntity:entity];
        NSPredicate *pred;
    
        if(pstring)
        {
            if(arr) pred = [NSPredicate predicateWithFormat:pstring argumentArray:arr];
            else    pred = [NSPredicate predicateWithFormat:pstring];
            [fetch setPredicate:pred];
        }
    
        NSError *error = nil;
    
        NSArray *results = [self executeFetchRequest:fetch error:&error];
    
        if (error) {
            NSLog(@"MOC Fetch - Unresolved error %@, %@", error, [error userInfo]);
            return [NSArray array];
        }
    
        return results;
    
    }
    
    @end
    

    【讨论】:

    • 嗨,沃伦。谢谢您的回答。 NSManagedObject 确实是我在“for”循环中需要的类。
    • 有没有简单的方法来解析托管对象?例如,有一个类来表示一个托管对象的实例以及它的所有属性以及与其他对象的关系?
    • 不太清楚你想要什么。 NSManagedObject 实例是数据库表条目的表示。您可以从 NSEntityDescription 获取实体的所有属性和关系信息。
    • 嗨,沃伦。我想生成类,以便可以将 NSManagedObject 转换为更具描述性的类。一种公开其属性而不是访问键/值对集合的方法。我通过分析我的数据模型的“文件 > 新建 > Cocoa 类 > 托管对象类”方法做到了这一点。
    猜你喜欢
    • 1970-01-01
    • 2012-05-09
    • 1970-01-01
    • 2012-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-13
    • 1970-01-01
    相关资源
    最近更新 更多