2013-11-03 2 views
0

지난 몇 시간 동안 머리카락을 찢어 내고 이것이 작동하지 않는 이유를 알아 냈습니다. Core Data에 일대일 관계가 있으며, 세부 세그멘트에 값을 올바르게 전달하려고합니다.일대 다 관계 코어 데이터 : prepareForSegue에서 가져 오기 :

나는이 (가) configureCell에서 데이터를 가져 오는 경우 :

- (void)configureCell:(UITableViewCell *)cell atIndexPath(NSIndexPath *)indexPath 
{ 
TBAppDelegate *delegate = (TBAppDelegate *)[[UIApplication sharedApplication] delegate]; 

managedObjectContext = [delegate managedObjectContext]; 

self.everything = [fetchedResultsController.fetchedObjects objectAtIndex:indexPath.section]; 

NSArray *arg = [NSKeyedUnarchiver unarchiveObjectWithData:self.everything.urls.urls]; 

NSLog (@"%@, [arg valueForKey:@"source"]); // this prints out a list of stored urls containing locations of jpeg images 
} 
: 방법, 그것은 나에게 예상대로 값을 제공합니다 아래

은 데이터 모델 (속성은 이진 데이터 유형)입니다

내 NSFetchedResultsController :

- (NSFetchedResultsController *)fetchedResultsController 
{ 
TBAppDelegate *delegate = (TBAppDelegate *)[[UIApplication sharedApplication] delegate]; 

self.managedObjectContext = delegate.managedObjectContext; 

NSFetchRequest *fetchRequest = nil; 

fetchRequest = [[NSFetchRequest alloc] init]; 

NSEntityDescription *entity = nil; 

entity = [NSEntityDescription entityForName:@"Everything" inManagedObjectContext:managedObjectContext]; 

[fetchRequest setEntity:entity]; 

[fetchRequest setFetchBatchSize:INFINITY]; 

NSSortDescriptor *albumDescriptor = nil; 

albumDescriptor = [[NSSortDescriptor alloc] initWithKey:@"album_names" ascending:NO]; 

NSSortDescriptor *urlDescriptor = nil; 

urlDescriptor = [[NSSortDescriptor alloc] initWithKey:@"urls.urls" ascending:NO]; 

NSArray *sortDescriptors = nil; 

sortDescriptors = [[NSArray alloc] initWithObjects:albumDescriptor, urlDescriptor, nil]; 

[fetchRequest setSortDescriptors:sortDescriptors]; 

NSFetchedResultsController *frc = nil; 

frc = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:nil cacheName:@"Root"]; 

[frc setDelegate:self]; 

[self setFetchedResultsController:frc]; 

return frc; 

} 

여기 내 prepareForSegue : 메소드가 있습니다. 이 부분은 작동하지 않습니다. 자세히보기 컨트롤러의 섹션 수를 설정하려고 시도 할 때 인식 할 수없는 선택기 오류로 인해 충돌이 발생합니다. 상세 뷰 컨트롤러의

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    NSIndexPath *indexPath; 

    indexPath = [self.tableView indexPathForSelectedRow]; 

    TBAppDelegate *delegate = (TBAppDelegate *)[[UIApplication sharedApplication] delegate]; 

    managedObjectContext = [delegate managedObjectContext]; 

    self.everything = [fetchedResultsController.fetchedObjects objectAtIndex:indexPath.section]; 

    NSArray *data = [NSKeyedUnarchiver unarchiveObjectWithData:self.everything.album_names]; 

    NSArray *urls = [NSKeyedUnarchiver unarchiveObjectWithData:self.everything.urls.urls]; 

    TBEverythingDetailViewController *details = segue.destinationViewController; 

    details.everything = [[data objectAtIndex:indexPath.section]valueForKey:@"name"]; 

    self.urls.urls = [fetchedResultsController.fetchedObjects objectAtIndex:indexPath.section]; 

    details.everythingGroup = [urls objectAtIndex:indexPath.section]; 
} 

부 : 나는 왜 작동하지 않습니다에 관한 여기에 몇 가지 명백한 단계를 놓친 거지 같은 느낌

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 

// This is where the actual crash happens. It complains about [_NSDictionaryM urls:] unrecognized selector sent to instance 
NSArray *count = [NSKeyedUnarchiver unarchiveObjectWithData:self.everythingGroup.urls.urls]; 

return [count count]; 
} 

. 어떤 도움을받을 수 있을까요?

+0

실제로 -fetchedResultsController에서 NSFetchedResultsController를 반환합니까? – Joride

답변

0

은 everythingGroup :

NSArray *urls = [NSKeyedUnarchiver unarchiveObjectWithData:self.everything.urls.urls]; 
details.everythingGroup = [urls objectAtIndex:indexPath.section]; 

내가 URLs.urls에서 보는 바와 같이

이있는 NSData에 보관 된 사전의 배열입니다. 그래서 details.everythingGroup 지금 사전,하지만 당신은 너무 그것을 액세스 :

NSArray *count = [NSKeyedUnarchiver unarchiveObjectWithData:self.everythingGroup.urls.urls];

그것이 여기에 충돌 있다는 정상입니다. 액세스 할 때 details.everythingGroupEverything이어야합니다.

0

귀하의 self.everythinggrpup은 NSDictionary이므로 선택기 "urls"에 응답하지 않습니다. 당신은 self.everythinggroup에 Everything 객체 대신에 NSDictionary를 assimigning하고 있습니다. 따라서 그렇게하지 않거나 사전에서 모든 것을 꺼내어 URL을 요청해야합니다. 이걸 어떻게 설정 했느냐에 달렸어.

당신은 세부 사항을 설정 않았다