2009-09-16 6 views
7

CoreData persistentStore로 데이터 집합을 가져 오려고합니다. 이것은 런타임에 사용자에게 표시되는 읽기 전용 데이터입니다.CoreData 일대 다 및 역 관계 문제

"Item"이라는 엔티티와 일대 다 관계가있는 엔티티가 "Category"라는 엔티티를 가지고 있는데,이 엔티티는 카테고리와 반대 관계가 있습니다.

컨텍스트에 항목을 추가 할 때 해당 범주를 올바른 범주에 연결하려면 어떻게해야합니까? SQLite dB에서 Item 테이블에 Category 필드를 추가하여이 작업을 수행 할 수 있으며 관계의 Categories Primary 키를 사용하는 것으로 나타났습니다. 그러나 PK는 배후에 있습니다 ... 연결하는 방법이 있습니까?

나는 또한 항목을 추가 CoreData에 의해 생성 된 방법이 있다는 것을 내 범주 클래스에서 볼 수 있지만, 나는 이러한 CoreData이 관계를 유지할 수 있도록 ALOS 뒤에 - 더 - 장면의 방법임을 가정입니다 :

@interface Category (CoreDataGeneratedAccessors) 

- (void)addItemObject:(Item *)value; 
- (void)removeItemObject:(Item *)value; 
- (void)addItems:(NSSet *)value; 
- (void)removeItems:(NSSet *)value; 

@end 

프로그래밍 가이드에서 CoreData가 관계의 다른 측면을 자동으로 처리한다는 것을 읽었지 만 항목을 추가 할 때 Category에 대한 초기 링크를 어떻게 수행하는지 알 수 없습니다.

감사

JK는

답변

9

는 다른 가능성이 있습니다. 당신은 이미 (A 통해 얻은 예를 들어 요청을 인출) 범주 객체를 가지고 있고, 가정 변수

Category *category; 
Item *item; 

당신은 단순히 다음을 수행하십시오

item.category = category; 

또는

[category setValue: category forKey:@"category"]; 

핵심 데이터가 자동으로 역관계를 설정하기 때문에 완료됩니다.

당신이 종류의 객체가없는, 또는 당신이 다음을 수행, 새로운 하나를 삽입하려면 :

// Create a new instance of the entity 
Category *category = (Category *) [NSEntityDescription insertNewObjectForEntityForName:@"Category" inManagedObjectContext:managedObjectContext]; 
// add all of the category properties, then set the relationship 
// for instance set the category name 
[category setValue:@"myCategoryName" forKey:@"name"]; 
[category setValue:item forKey:@"item"]; 

은 그럼 당신은 정확히 같은 전에 항목 객체에 대해이 범주 객체를 설정합니다.

[category addItemObject:item]; 

또는 역 :

[item addCategoryObject:category]; 
마지막으로, 당신은 코어 데이터에 의해 내부적으로 사용되지 않습니다 보여 방법 : 당신은 또한 다음을 수행 할 수 있도록 이러한 방법은을 사용할 수 있습니다
+0

고마움, 용서받지 못함. 나는 이미 다른 게시판의 다른 게시물에서 이것을 대부분 알아 냈지만 귀하의 대답은 분명히 분명합니다. Apples docs가 좋았 으면 좋겠다! 이제 특정 카테고리의 항목을 가져 오는 방법을 배우고 집이 무료입니다! jk – Alpinista

+1

항목 엔티티에서 개체를 가져 오는 데 사용하는 가져 오기 요청에 NSPredicate를 연결해야합니다. Category 엔티티가 속성의 카테고리 이름을 저장하는 경우 Item에서 Category까지 to-one 관계를 사용합니다. NSPredicate * predicate = [NSPredicate predicateWithFormat : @ "category.name LIKE % @", yourCategoryNameStringHere]; 이 엔디티를 항목 엔티티에서 개체를 가져 오는 데 사용하는 가져 오기 요청에 연결하기 만하면됩니다. –

+1

Unforgiven, 다시 한 번 감사드립니다. 다른 방향으로 이동할 수도 있음을 발견했습니다. 카테고리가있는 경우 NSSet에서 Categorie 's Items 속성의 항목 배열을 가져올 수 있습니다. – Alpinista