2012-06-19 4 views
0

Pro Core 데이터 예제를보고 있었고 ManagedObjectContext를 전달하는 좋은 방법이 무엇인지 궁금합니다. 이 책의 예제에서, 나는 그때 그는이 MasterViewController에StoryBoard를 사용할 때 NSManagedObjectContext 참조 전달

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
    self.title = NSLocalizedString(@"League Manager", @"League Manager"); 
    id delegate = [[UIApplication sharedApplication] delegate]; 
    self.managedObjectContext = [delegate managedObjectContext]; 
    } 
    return self; 
} 

이 새의 ViewController이 테이블의 행 선택에서 스택에 밀려 그런 때,이 작업이 수행, 저자는 AppDelegate에있는 ManagedObjectContext를 초기화 참조 :

NSManagedObject *team = [[self fetchedResultsController] objectAtIndexPath:indexPath]; 
    TeamViewController *teamViewController = [[TeamViewController alloc] initWithMasterController:self team:team]; 
    [self presentModalViewController:teamViewController animated:YES]; 

StoryBoards를 사용하면 더 이상 init 메소드가 표시되지 않습니다.

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
     UIViewController *destination = ((UINavigationController *)segue.destinationViewController).topViewController; 

     if ([destination respondsToSelector:@selector(setDelegate:)]) { 
      [destination setValue:self forKey:@"delegate"]; 
     } 

나는 내 수업이 분리 유지하는 좋은 방법을 파악하고있을 수 없습니다, 저자는 이런 일을 할 것입니다 나는 prepareForSegue 주로 사용되는보고 나는 시작에서 iOS 5 개발 책에서 참조 내 viewControllers에서 managedObjectContext에 대한 참조. 그것을 볼 필요가있는 모든 뷰 컨트롤러에 설정 한 managedObjectContext가 있습니까? 첫 번째 예제의 작성자가 수행 한 작업을 수행하고 참조가있는 MasterViewController에 대한 참조를 유지하고 다른 ViewController로 전달합니다. 나는 이런 식의 "모범 사례"가 무엇인지 잘 모릅니다. 감사!

답변

5

prepareForSegue:sender:은 실제로 스토리 보드를 사용할 때 하나의보기 컨트롤러에서 다른보기 컨트롤러로 데이터를 전달하는 좋은 방법입니다. 게시 한 예제 prepareForSegue 코드는 사용자가 수행하는 방법과 정확하게 일치합니다. 내 애플 리케이션 중 하나 정확히이 코드를 가지고 :

- (void) prepareForSegue:(UIStoryboardSegue*)segue sender:(id)sender 
{ 
    if([[segue identifier] isEqualToString:@"showLog"]) { 
     UIViewController* logView = segue.destinationViewController; 
     if([logView respondsToSelector:@selector(setManagedObjectContext:)]) { 
      [logView setValue:self.managedObjectContext forKey:@"managedObjectContext"]; 
     } 
    } 
} 

Storyboard session from last year's WWDC 좋은 구경은, 당신이 그것을 볼 수없는 경우.

관련 문제