2010-08-01 4 views
0

코어 데이터에 문제가있어 밧줄 끝 부분에 있습니다. 그래서 당신들 중 멋진 사람들이 도울 수 있는지 궁금합니다.코어 데이터 - 관계 설정

기본적으로 코어 데이터 프로젝트에는 두 개의 엔티티가 있습니다. 이들은 :

저자 {AUTHORNAME, 생년월일 (DateOfBirth)}
예약 {은 bookname, 페이지}

'책 소위'저자 '라는 책에 저자 일대 다 관계와 역의 관계가있다 '. 이 엔티티의 서브 클래스를 내 보내서 내 페치 컨트롤러를 만들었습니다. 이제 프로그래밍 방식으로 관계를 정의해야합니까?

현재 작성자 목록이 내 테이블보기에 표시됩니다. 현재 필자는 저자를 탭할 때 Core Data 프로젝트에있는 모든 책의 목록 만 표시 할 수 있습니다. 특정 저자의 도서 목록에 액세스하려면 어떻게해야합니까?

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY authors.bookName LIKE[cd] %@", authorName]; 

...하지만 나는 그것이 잘못된 확신 : 나는 내가 자 NSPredicate을 사용 추정하고, 내가 지금까지 그것에 대해 가지고있는 논리이다.

나는 몇 시간 동안 웹을 크롤링하여 혼란스러워하고 있습니다. 그래서 어떤 도움을 주시면 감사하겠습니다.

많은 감사합니다 :)

답변

0

그것은 당신이 다음과 같은 뭔가가 가능성이 높습니다 : 그 클래스는 위의 읽을 수있는 코드를 의미 속성으로 정의 된 개체의 각 속성이

@interface AuthorListController : UITableViewController { 
    UITableView *table; 
    NSArray *authors; // array of NSManagedObjects 
} 

@property (nonatomic, retain) IBOutlet UITableView *table; 
@property (nonatomic, retain) NSArray *authors; 

그리고 구현에 당신 이 :

-(void)tableView:(UITableView*)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath { 
    NSManagedObject *author = [authors objectAtIndex:indexPath.row]; 
    // create and show your book-level view here 
} 

을 이제 당신이 선택한 저자 객체를 가지고, 당신은 책을 얻을 수있다 (당신이 데이터 모델러의 일대 다 관계를 설정 한 가정) 직접 :

NSSet *books = author.books; 

하지만 당신은로드 저자 객체, 어떤 이유로, 당신이 당신의 조건에> 저자 관계를 새로운 검색을 구축하고 도서 -를 사용할 수 있습니다하지 않은 경우 :

NSManagedObjectContext *objectContext = self.managedObjectContext; 
NSEntityDescription *entity = [NSEntity entityForName:@"Books" inManagedObjectContext:objectContext]; 
NSFetchRequest *fetch = [[NSFetchRequest alloc] init]; 
[fetch setEntity:entity]; 

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"author.name == %@", authorName]; 
[fetch setPredicate:predicate]; 

// ... create your error object and execute the fetch, etc 
+0

NSArray에 'authors'가 없습니다. 나는 단순히 기본 탐색 컨트롤러 핵심 데이터 템플릿을 사용하고 있습니다. 또한 'author.name'은 'author.authorName'을 의미합니까? 나는 간단한 '.name'이 없다. 감사합니다. – Martyn

+0

지금 문제를 해결할 수있었습니다. 'authorName == % @ ", authorName'을 사용했습니다. 도움에 감사드립니다! – Martyn

0

멤버 변수 "책은"책의 객체가 될 것입니다 모두의 NSSet NSManagedObject의 기록에 저자 클래스와 포인트에 존재합니다.

은 분명히 그렇게 저자 객체를 주어진 저자가 책의 목록을 얻으려면, 저자 객체를 얻을 수있어 :

NSManagedObject *author = [self getSelectedAuthor]; 
NSSet *booksByAuthor = [author valueForKey:@"books"]; 
NSArray *booksArray = [booksByAuthor allObjects]; 

당신은 jQuery과 채우려면 NSArray를 사용할 수 있습니다.

XCode에는 핵심 데이터 엔티티에 대한 관리 객체 클래스가 자동으로 생성됩니다. xcdatamodel 파일을 열고 엔티티 중 하나를 선택한 다음 파일 -> 새로 만들기를 선택하십시오. 옵션으로 Managed Object Class가 표시되어야합니다. 이렇게하면 NSManagedObject의 하위 클래스로 Author 및 Book 클래스를 만들 수 있습니다.

Author *author = [self getSelectedAuthor]; 
NSSet *booksByAuthor = author.books; 
NSArray *booksArray = [booksByAuthor allObjects]; 
+0

난을 미안하지만이게 어떻게 도움이되는지 모르겠다. – Martyn

+0

도움이 되셨습니까? –

+0

세부보기 컨트롤러 또는 내보기 컨트롤러에서이 작업을 수행합니까? 또한 'getSelecterAuthor'의 출처는 어디입니까? – Martyn