gpt4 book ai didi

iphone - 如何在 Core Data 中保存实体并应用关系?

转载 作者:行者123 更新时间:2023-12-01 18:31:09 25 4
gpt4 key购买 nike

我试图找到关于如何让用户动态添加对象并应用必要关系的苹果文档/教程,但需要一些关于哪些教程好或苹果文档有帮助的帮助。

我的核心数据问题的一个例子:Photographer 的 2 个实体和 Photo ,其中 Photographer 之间存在一对多关系和 Photo .当用户添加 Photo ,我需要能够指定哪个 Photographer拿了Photo .

最佳答案

因此,首先您将为照片创建一个新实体:

    NSManagedObject *photoObject = [NSEntityDescription 
insertNewObjectForEntityForName:[entity name]
inManagedObjectContext:context];

NSManagedObject 可以替换为您的 Photo 对象,或者如果您创建了子类,则可以使用 w/e 替换。
您将为它设置所有属性。要设置摄影师,您将像设置任何其他属性一样设置它。如果没有摄影师的引用资料,可以这样查询:
    NSFetchRequest *query = [[NSFetchRequest alloc] initWithEntityName:@"Photographer"];
[query setPredicate:[NSPredicate predicateWithFormat:@"id == %@", photographerId]];
NSArray *queryResults = [context executeFetchRequest:bcQuery error:&error];

您的查询结果将包含摄影师对象。然后,您可以在您的 photoObject 上将其设置为任何其他属性,链接将自动创建。
     [photoObject setPhotographer:[queryResults objectAtIndex:0]];

或者如果您使用的是 NSManagedObject:
    [photoObject setValue:[queryResults objectAtIndex:0] forKey:@"photographer"];

CoreData 最酷的地方在于它是关系型的。您不能真正将其视为典型的 DBMS。您以非常面向对象的方式创建对象并设置它们之间的关系。没有需要处理的主键/外键,这一切都由 CoreData 在后台完成。

编辑:

您可以选择创建 NSManagedObject 的子类,以便更轻松地访问实体的属性和关系。确保在 CoreData 模型浏览器中指定这个子类;在侧边栏中,您将“类”字段更改为您的新子类。

下面是一个 NSManagedObject 子类的例子:
//Interface
@interface Photo : NSManagedObject

#pragma mark - Attributes

@property (nonatomic, strong) NSNumber *id;
@property (nonatomic, strong) NSString *name;

#pragma mark - Relationships

@property (nonatomic, strong) NSSet *someToManyRelationship;
@property (nonatomic, strong) Photographer *photographer;

@end

//Implementation
@implementation Photo

@dynamic id, name;
@dynamic someToManyRelationship, photographer;

@end

希望这可以帮助!

关于iphone - 如何在 Core Data 中保存实体并应用关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8652081/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com