문제

두 개의 엔티티가있는 간단한 응용 프로그램이 있습니다.

사람:

Attributes:
    name
Relationships:
    nativeLanguage: (<<-> Language.natives)
    nonNativeLanguage: (<<-> Language.nonNatives)

언어:

Attributes:
    name
Relationships:
    natives: (<->> Person.nativeLanguage)
    nonNatives: (<->> Person.nonNativeLanguage)

사람들의 편집 화면에서, 나는 사람을 위해 나열된 비 네이티브 언어를 나열하고 다른 언어를 선택할 수있는 드롭 박스와 목록에 새 언어를 추가 할 수있는 버튼을 선택할 수있는 테이블 디스플레이를 설정했습니다.

내 목표는 다음과 같이 함수를 만드는 것입니다.

- (IBAction)addNonNativeLanguage:(id)sender {
    // tack the language to the end of the list on a many-many relationship
    PersonEntry.nonNativeLanaguages = PersonEntry.nonNativeLanguages + sender;
}

작업을 버튼에 첨부하십시오. 속임수는 일반 변수를 할당하고 수정하는 방법을 알고 있지만 인터페이스 빌더 외부의 코어 데이터의 내용을 수정하는 방법을 모르겠습니다. Objective-C에서 어떻게 할 수 있습니까?

도움이 되었습니까?

해결책

모든 핵심 데이터 모델 엔티티 클래스에는 Many 관계 조작에 대한 다음과 같은 코드가 있습니다.

- (void)addNatives:(NSSet*)value_ {
    [self willChangeValueForKey:@"natives" withSetMutation:NSKeyValueUnionSetMutation usingObjects:value_];
    [[self primitiveValueForKey:@"natives"] unionSet:value_];
    [self didChangeValueForKey:@"natives" withSetMutation:NSKeyValueUnionSetMutation usingObjects:value_];
}

-(void)removeNatives:(NSSet*)value_ {
    [self willChangeValueForKey:@"natives" withSetMutation:NSKeyValueMinusSetMutation usingObjects:value_];
    [[self primitiveValueForKey:@"natives"] minusSet:value_];
    [self didChangeValueForKey:@"natives" withSetMutation:NSKeyValueMinusSetMutation usingObjects:value_];
}

- (void)addNativesObject:(Person*)value_ {
    NSSet *changedObjects = [[NSSet alloc] initWithObjects:&value_ count:1];
    [self willChangeValueForKey:@"natives" withSetMutation:NSKeyValueUnionSetMutation usingObjects:changedObjects];
    [[self primitiveValueForKey:@"natives"] addObject:value_];
    [self didChangeValueForKey:@"natives" withSetMutation:NSKeyValueUnionSetMutation usingObjects:changedObjects];
    [changedObjects release];
}

- (void)removeNativesObject:(Person*)value_ {
    NSSet *changedObjects = [[NSSet alloc] initWithObjects:&value_ count:1];
    [self willChangeValueForKey:@"natives" withSetMutation:NSKeyValueMinusSetMutation usingObjects:changedObjects];
    [[self primitiveValueForKey:@"natives"] removeObject:value_];
    [self didChangeValueForKey:@"natives" withSetMutation:NSKeyValueMinusSetMutation usingObjects:changedObjects];
    [changedObjects release];
}

- (NSMutableSet*)nativesSet {
    [self willAccessValueForKey:@"natives"];
    NSMutableSet *result = [self mutableSetValueForKey:@"natives"];
    [self didAccessValueForKey:@"natives"];
    return result;
}

이 템플릿 코드는 Wolf Rentzsch의 매우 우수한 것입니다. Mogenerator (데이터 모델의 모든 저장마다 자동으로 적절하게 생성).

또한, 유명 관계에 대한 핵심 데이터 백엔드는 변하지 않습니다. 데이터에 대한 주문을 유지하려면 직접 수행해야합니다.

다른 팁

먼저 원하는 ManagedObject 인스턴스/레코드를 찾아야합니다. 빠르고 더러운 방법은 사람 객체에 어떤 객체가 있는지 표시하는 인터페이스 요소를 묻는 것입니다.

객체가 있으면 호출을 사용합니다 mutableSetValueForKey: 관계의 이름으로. 이것은 당신에게 모든 관련 랑게의 돌연변이 가능한 세트를 제공합니다. 그런 다음 적절한 언어 객체를 가져와 표준 nsmutableset 메소드를 사용하여 세트에 추가하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top