2014-01-15 2 views
0

핵심 데이터 - 기존 개체 (UserData)와의 관계 저장 문제가 있습니다. 나는 하나의 사용자에 몇 가지 포지션을 저장할 - 관계가 한 (사용자가) 많은 (위치)이다핵심 데이터의 기존 개체에 대한 관계 만들기

이 UserData를 수 있습니다 :

@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 

누군가가 수 :

@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입니다 기존 사용자에게 새로운 위치를 저장하는 방법을 설명해주십시오. userData 가정

답변

1

쉬운. userData 가정하면

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

mutableSetValueForKey:

그 관계를 변경 가능한 프록시 객체를 반환 KVC 사용 ... 상황에서 기존의 사용자 데이터 객체이며, position 기존 위치의 목적이다. 당신 (또는 Xcode의 코드 생성)이 관계를 NSSet으로 선언하고 있다면 상관 없습니다. 당신은 변경 가능한 프록시 객체를 얻고, 그것으로 물건을 만든 다음, 컨텍스트를 저장할 때 변경 한 내용이 유지됩니다. addPositionRelationshipObject:으로 직접 호출하면 안됩니다. 즉, KVC 정렬되지 않은 컬렉션 접근 접근 방법입니다. 가변 프록시는 당신을 위해 그것을 호출하고, 당신은 그것을 구현할 필요가 없다 (동적으로 생성된다).

Key Value Coding documentation에는 컬렉션 접근 방법에 대한 자세한 정보가 있습니다. 따라서 Core Data Programming guide도 마찬가지입니다. 이 두 가지 모두 약간 오래된 버전이며, 관계를 조작 할 때 핵심 데이터 문서가 약간 오도 될 수 있습니다. 콜렉션 접근자를 사용한다고 말하면 나중에 접근 자 메서드를 직접 호출 할 수 있습니다. , KVC를 사용하면 많은 어려움을 덜어줍니다).

+0

이 : CoreData : 오류 :이 줄에있는 NSManagedObject 클래스 'UserData'에서 지정된 초기화 프로그램을 호출하지 못했습니다. NSMutableSet * userSet = [사용자 mutableSetValueForKey : @ "positionRelationship"]; ' –

+0

답변으로이 작업을 수행하는 방법을 알아 냈습니다. @quellish에 의해 주어진다. 도와 줘서 고마워. –

0

UserData의 인스턴스이며, p1p2[userData addPositionRelationshipObject: p1];

[userData addPositionRelationshipObject: p2];

가 잘 작동합니다 다음, Position의 인스턴스입니다.

+0

또는'p1.positionRelationship = userData' –

+0

이것은 이해할 수없는 부분입니다. 내가 사용하는 경우 '[userData addPositionRelationshipObject : p1]; ' 어떻게 핵심 데이터가 UserData의 어느 사용자가 정확한지 알 수 있습니까? –

+0

userData는 "UserData"엔티티의 하나의 인스턴스이며, userData는 단 한 명의 사용자와'[userData addPositionRelationshipObject : p1];을 사용하여 Position의 인스턴스에 관계를 추가합니다. – user3071962

관련 문제