2014-01-15 62 views
0

我有问题与核心数据 - 节能关系到现有的对象(的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 

可能有人向我解释如何为现有用户保存新职位?

回答

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,你会为自己节省很多麻烦)。

+0

得到这个:CoreData:错误:无法致电该行NSManagedObject类“的UserData”指定初始化'的NSMutableSet * USERSET = [用户mutableSetValueForKey:@“positionRelationship”];' –

+0

我已经想通了如何与答案做到这一点由@quellish给出。谢谢你的帮助。 –

0

假设userDataUserData一个实例,p1p2Position实例,则 [userData addPositionRelationshipObject: p1];

[userData addPositionRelationshipObject: p2];

应该很好地工作。

+0

或'p1.positionRelationship = userData' –

+0

这是部分我不明白。如果我使用 '[用户数据addPositionRelationshipObject:P1]' 数据如何内核将知道哪些用户的UserData是正确的? –

+0

用户数据是实体“的UserData”的并且作为一个实例,例如用户数据仅表示一个用户,并用'[USERDATA addPositionRelationshipObject:P1];'你的关系添加到位置它的一个实例。 – user3071962