2014-01-15 85 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