2009-09-19 3 views
6

현재 프로젝트에서 장애물이되었습니다. 레스토랑 문자열 : 카테고리 이름 : 나는 기본적으로 많은 코어 데이터 레시피 응용 프로그램처럼 응용 프로그램을 가지고 ... 여기 내가 내 .xcdatamodeliPhone 용 코어 데이터의 다 대다 관계에 도움이 필요합니다.

엔티티에있는 기본 구조입니다 카테고리 < ----에 - 많은 관계

법인 : 장르 문자열 : 레스토랑 이름 : 레스토랑 <을 ---- 일대 그러니까 기본적으로 관계 , 레스토랑이 가질 수있는 여러 범주 ... 그리고 미리 정의 된 카테고리의 CONST 수있다 예 : nt : 이름 : 칠리의 카테고리 : 테이크 아웃, 패밀리 레스토랑

"테이크 아웃"및 "패밀리 레스토랑"은 10 가지 가능한 레스토랑 카테고리 중 2 가지입니다. 이 작업에 대해 어떻게해야합니까? sqllite 데이터베이스를 살펴본 결과 내 ZRestaurant 및 ZCategory 테이블 + 두 테이블에 대한 조인 테이블이 있습니다 ... 두 테이블 모두에 데이터가 있습니다 ...

어떻게 수행합니까? 나는 다른 가치를 가진 나의 식당 Catagory를 설정하는 것에 관해 가느냐? 어떻게 그들을 다시 가져올 수 있습니까?

감사합니다. 커트

답변

5

OK, 나는 마침내 사실 사이의 혼합이었다 내 솔루션 함께했다 지난 2 일 동안이 작업을 한 후 Alex and Wills suggestions ... 두 분 모두에게 감사드립니다 !! 여기

는 ... 내가 무슨

NSManagedObjectContext *context = [restaurant managedObjectContext]; 


NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
[fetchRequest setEntity:[NSEntityDescription entityForName:@"Category" inManagedObjectContext:context]]; 
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES]; 
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:&sortDescriptor count:1]; 
[fetchRequest setSortDescriptors:sortDescriptors]; 

NSError *error = nil; 
NSArray *possibleCategories = [context executeFetchRequest:fetchRequest error:&error]; 

categoryArray = [[NSMutableArray alloc] initWithArray:possibleCategories]; 

currentCategories = [restaurant valueForKeyPath:@"categories"]; 

[restaurant addCategoriesObject:(Category *)[possibleCategories objectAtIndex:15 ]]; 

[currentCategories addObject:(Category*)[categoryArray objectAtIndex:15]]; 

을하고 나서이

- (void)save{ 
    NSLog(@"EditCatagoriesTableViewController - save"); 

    NSSet* myCategorySet = [[NSSet alloc] initWithSet:currentCategories]; 

    NSError *error = nil; 

    [restaurant addCategories:myCategorySet]; 


    error = nil; 
    if (![restaurant.managedObjectContext save:&error]) { 
     // Handle error 
     NSLog(@"restaurant - Unresolved error %@, %@", error, [error userInfo]); 
     exit(-1); // Fail 
    }  
} 

같은 저장 그리고 그게 않습니다!

도움 주셔서 대단히 감사합니다.

-Kurt

0

다른 값으로 식당 식당을 설정하려면 어떻게해야합니까? 어떻게 그들을 다시 가져올 수 있습니까?

엔터티 유형 (예 : "레스토랑")의 새 관리 대상 객체 인스턴스를 추가하고 해당 인스턴스의 속성 (예 : "레스토랑")을 추가하는 방법을 설명하는 가장 좋은 방법은 Core Data Tutorial for iPhone입니다. 카테고리 ") 결과를 가져옵니다.

이 튜토리얼에서는 날짜 및 위치 속성을 갖는 "이벤트"라는 엔터티 유형을 사용하지만 아이디어는 모두 동일합니다.

4

대신, 이런 일을하고 싶은 것 :

Restaurant *mcDonalds = (Restaurant *)[NSEntityDescription insertNewObjectForEntityForName:@"Restaurant" inManagedObjectContext:managedObjectContext]; 
mcDonalds.name = @"McDonalds"; 

Restaurant *inNOut = (Restaurant *)[NSEntityDescription insertNewObjectForEntityForName:@"Restaurant" inManagedObjectContext:managedObjectContext]; 
inNOut.name = @"In-N-Out"; 

Category *driveThru = (Category *)[NSEntityDescription insertNewObjectForEntityForName:@"Category" inManagedObjectContext:managedObjectContext]; 
driveThru.name = @"Drive Thru to Go"; 

Category *sitDown = (Category *)[NSEntityDescription insertNewObjectForEntityForName:@"Category" inManagedObjectContext:managedObjectContext]; 
sitDown.name = @"Sit Down and Eat"; 

// make NSSet* of Category objects 
NSSet *fastFood = [NSSet setWithObjects:driveThru, sitDown, nil]; 

// set Restaurant instances' categories ("to-many") property 
mcDonalds.categories = fastFood; 
inNOut.categories = fastFood; 

// save changes to managedObjectContext... 
NSError *error = nil; 
if ([managedObjectContext save:&error]) { 
    // handle save error 
} 

을 당신은 제대로 Category 관리되는 개체를 인스턴스화하지 않는, 그리고 당신이 접근을 사용하는 방법을 배우고 싶어요. 일단 그렇게하면 페치를하는 법을 더 잘 배울 수 있습니다.

솔직히 말해서 프로젝트를 옆으로두고 Core Data Tutorial for iPhone을 통과하는 것이 좋습니다.

4

NSManagedObject 하위 클래스에서 "-addCatagoryObject :"와 같은 메서드를 호출하려면 실제 .m 파일에 해당 메서드에 대한 코드가 있어야합니다. 런타임에는 생성되지 않습니다.

그러나 Xcode에서 반자동으로 자동 생성 될 수 있습니다. Xcode에서 메소드 정의 및 구현을 복사 할 수있는 다양한 메뉴 항목을 찾아보십시오.

대부분의 사람들은 이러한 항목을 건너 뛰고 -addCategoryObject :를 호출 할 필요가 없습니다. 런타임에서 접근 코드를 생성하도록 할 수 있습니다.

먼저 변수 이름 (헤더 및 모델에서)은 "카테고리"가 아닌 "카테고리"여야합니다.

그런 다음 같은 것을 사용하여 원하는 설정 카테고리를 설정할 수 있습니다

restaurant.categories = [NSSet setWithObjects:category1, category2, nil]; 
+0

은 .. 당신이 응답을 .. 내 문제는 내 코드에 다른 곳에서 일을 할 수 있다고 생각 것 감사 때문에이 아직도 내가 내 SQLLite의 DB에서 찾고, 작동하지 않으며 나는 어떤을 얻을 수 없다 조인 테이블에 내 식당에 나타나거나 연관 될 데이터. 일단 내가 알아 내면 다시 게시 할 것입니다. 정말 고맙습니다! – Kurt

관련 문제