为Core Data中的现有对象创建关系

时间:2014-01-15 16:21:14

标签: objective-c core-data relationship

我遇到Core Data问题 - 保存与现有对象(UserData)的关系。我想为一个用户保存一些位置 - 关系是一个(用户)到多个(位置)

这是UserData:

@class ApiKey, Positions, SecretApiKey;

@interface UserData : NSManagedObject

@property (nonatomic, retain) NSString * password;
@property (nonatomic, retain) NSString * username;
@property (nonatomic, retain) NSNumber * id;
@property (nonatomic, retain) ApiKey *apiKeyRelationship;
@property (nonatomic, retain) NSSet *positionRelationship;
@property (nonatomic, retain) SecretApiKey *secretApiKeyRelationship;
@end

@interface UserData (CoreDataGeneratedAccessors)

- (void)addPositionRelationshipObject:(Positions *)value;
- (void)removePositionRelationshipObject:(Positions *)value;
- (void)addPositionRelationship:(NSSet *)values;
- (void)removePositionRelationship:(NSSet *)values;

这是位置enitiy:

@class UserData;

@interface Positions : NSManagedObject

@property (nonatomic, retain) NSString * amount;
@property (nonatomic, retain) NSString * base;
@property (nonatomic, retain) NSNumber * id;
@property (nonatomic, retain) NSString * pl;
@property (nonatomic, retain) NSString * status;
@property (nonatomic, retain) NSString * swap;
@property (nonatomic, retain) NSString * symbol;
@property (nonatomic, retain) NSString * timestamp;
@property (nonatomic, retain) UserData *positionRelationship;

@end

有人可以解释一下如何为现有用户保存新职位吗?

2 个答案:

答案 0 :(得分:1)

易。假设userData是上下文中的现有用户数据对象,position是现有的位置对象...

NSMutableSet *stuff = [userData mutableSetValueForKey:@"positionRelationship"];
[stuff addObject:position];
// add more if you want.

mutableSetValueForKey:使用KVC为该关系返回可变代理对象。如果您(或Xcode的代码生成)将关系声明为NSSet,则无关紧要。你获得了可变代理对象,用它做了一些东西,然后当你保存你的上下文时,你所做的更改将被保留。你不应该直接调用addPositionRelationshipObject:,这是一个KVC无序集合集合访问器方法。可变代理为您调用,并且您不需要实现它(它们是动态生成的)。

Key Value Coding documentation有更多关于集合访问器方法的内容。 Core Data Programming guide也是如此。两者在这个时候都略显过时了,核心数据文档在操纵关系时可能会有点误导(他们提到使用集合访问器,然后说你可以选择直接调用访问器方法。真的,使用KVC,你会省去很多麻烦)。

答案 1 :(得分:0)

假设userDataUserData的实例,而p1p2Position的实例,那么 [userData addPositionRelationshipObject: p1];

[userData addPositionRelationshipObject: p2];

应该很好地工作。