2012-09-14 5 views
0

저는 핵심 데이터를 처음 사용하므로 다음과 같은 문제에 도움이 필요합니다.관계 오류 (코어 데이터)

두 개의 엔티티가 있습니다. 토크 및 스피커가 있습니다. 그들은 많은 관계가 있습니다.

토크 - 대상 : 스피커, 역 : 스피커 이야기 - 대상 : 토크, 역 : "일대 다 관계"스피커

필드는 두 기관에 확인됩니다.

사용할 수있는 모든 대화를 나열하는 테이블보기 컨트롤러가 있습니다.

- (NSFetchedResultsController *)fetchedResultsController 
{ 
    if (_fetchedResultsController != nil) { 
     return _fetchedResultsController; 
    } 

    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
    NSEntityDescription *entity = [NSEntityDescription 
            entityForName:@"Talk" inManagedObjectContext:self.managedObjectContext]; 
    [fetchRequest setEntity:entity]; 

    NSSortDescriptor *sort = [[NSSortDescriptor alloc] 
           initWithKey:@"date" ascending:NO]; 
    [fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]]; 
    [fetchRequest setFetchBatchSize:20]; 

    NSFetchedResultsController *theFetchedResultsController = 
    [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest 
             managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil 
                cacheName:@"Root"]; 
    self.fetchedResultsController = theFetchedResultsController; 
    _fetchedResultsController.delegate = self; 

    return _fetchedResultsController; 
} 

내가 셀을 클릭

이, 내가 선택한 이야기의 세부 정보를 보여주는 또 다른 뷰 컨트롤러를로드 할이 내가 뭐하는 거지 방법이다.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    TalksDetailsViewController *talksDetails = [[TalksDetailsViewController alloc] initWithTalksInfo:[_fetchedResultsController objectAtIndexPath:indexPath]]; 
    [self.navigationController pushViewController:talksDetails animated:YES]; 
} 

문제는 다음과 같습니다 :

이 내가 뭐하는 거지입니다 내가 TalksDetailsViewController에 스피커를 볼 수 없습니다. 이 TalksDetailsViewController로 전송되는 정보입니다 :

Info: <Talk: 0x6e66920> (entity: Talk; id: 0x6e66880 <x-coredata://4063FE84-E6DB-4588-8133-9A55B512D6C8/Talk/p2> ; data: { 
    date = "2012-08-31 03:00:00 +0000"; 
    id = 7; 
    speaker = "<relationship fault: 0x6e994e0 'speaker'>"; 
    "start_time" = "17:14:55"; 
}) 

나는 아래의 코드로 뭔가를 시도,하지만 작동하지 않았다 : 그것은 결코에 들어간하지

for (Speaker *speakerInfo in self.talkInfo.speaker) { 
     NSLog(@"speaker info: %@", speakerInfo); 
} 

.

Relationship 'speaker' fault on managed object (0x7a76c30) <Talk: 0x7a76c30> (entity: Talk; id: 0x7a76b90 <x-coredata://4063FE84-E6DB-4588-8133-9A55B512D6C8/Talk/p2> ; data: { 
    date = "2012-08-31 03:00:00 +0000"; 
    id = 7; 
    speaker = "<relationship fault: 0x6bc5990 'speaker'>"; 
    "start_time" = "17:14:55"; 
}) 

좀 비슷한 질문을했다,하지만 내 문제가 해결되지 수 : 내가 self.talkInfo.speaker를 기록하려고하면

나는 같은 것을 얻을.

팁이 있습니까?

+0

관계 오류는 오류를 의미하지 않습니다. 스피커에서 속성 로깅을 시도 했습니까? 이 답변보기 : http : // stackoverflow.com/a/8876336/879119 – mkral

+0

시도했지만 작동하지 않았습니다. 귀하가 지적한 답변을 기반으로 문제를 해결할 수 없습니다. 하지만 고마워. – hdoria

+0

self.talkInfo를 기록 할 수 있습니까? 그래서 구조화 된 것을 볼 수 있습니다. – mkral

답변

1

먼저 SQLite 브라우저 (here if you dont have one)로 개체를 검사하십시오. 그리고 데이터가 핵심 데이터에 저장되고 있는지 확인하십시오. 시뮬레이터 파일 ~/Library/Application\ Support/iPhone\ Simulator/XX/Applications/XXXXXXXXXXX/Documents/XXXX.sqlite에 액세스하십시오. ZTALKS테이블ZSPEAKER과 값이 있는지 확인하십시오, 이것은 ZSPEAKER테이블Z_PK 값에 해당한다. 연결되면 관계가 연결됩니다.

귀하의 모델은 다음과 비슷한 모습이 될 것

enter image description here

을 당신이 토크 오브젝트과 같이있을 때 : 당신은 너무 것처럼 말하는 사람의 잡을 수있을 것입니다

Talk *talk = [**YourManagedObjectContext** executeFetchRequest:fetchRequest error:&error]; 

:

Speaker *speaker = talk.speaker; 

본인은 귀하와 설치하지만 잘하면이 도움이됩니다.

+0

ZTALKS에는 ZSPEAKER 열이 없습니다. 이 열은 many to many 관계를 설정하지 않을 때 생성됩니다. 설정하면 열이 만들어지지 않습니다. "날짜": "2012년 11월 2일" "ID": "8", "이름": "자바", "스피커" 모든 정보는이 형식에서, JSON에서 온다 : [ "/ API/V1/스피커/1 /" "/ API/V1/스피커/2 /" ] 나 배열을 저장하는 방법 : 경우 ([값 isKindOfClass [NSArray를 클래스] ]) { NSSet * valueSet = [NSSet setWithArray : value]; [managedObject setValue : valueSet forKey : key]; } – hdoria