일부 데이터를 저장하는 Core Data 기반 iPhone 응용 프로그램을 만들고 있습니다.managedObjectContext를 UITabBarController에 전달 문제
루트보기 컨트롤러 (RootViewController
)는 UITabBarController
입니다. 탭 표시 줄 컨트롤러에는 응용 프로그램 위임자가 두 개의보기 컨트롤러를 제공합니다. 첫 번째는 응용 프로그램의 제목 화면을 나타내는 UIViewController
의 인스턴스이고 두 번째 것은 데이터를 표시하는 데 사용되는 UITableViewController
입니다.
이것은 Core Data를 사용하는 첫 번째 iPhone 응용 프로그램입니다. 이 응용 프로그램을 구축하는 올바른 방법은 응용 프로그램 대리자에서 managedObjectModel
, managedObjectContext
및 persistentStoreCoordinator
개체를 만들고 초기화 한 다음 참조로 자식보기 컨트롤러에 managedObjectContext
을 전달하는 것입니다. 이게 내가 한 일이야.
그러나, 나는에 초기화 탭 표시 줄 컨트롤러에 managedObjectContext
개체를 전달할 관리하지 않았다 내 응용 프로그램 위임의 applicationDidFinishLaunching:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions: (NSDictionary *)launchOptions {
RootViewController *rootViewController = [[RootViewController alloc] init];
rootViewController.managedObjectContext = self.managedObjectContext;
[window addSubview:rootViewController.view];
[window makeKeyAndVisible];
[rootViewController release];
return YES;
}
탭 표시 줄이 제대로 표시하고 타이틀 화면보기를로드하더라도 컨트롤러 인 경우 managedObjectContext
은 0으로 유지됩니다. 나는 내가 뭘 잘못하고 있는지 알 수 없었다. 나는 또한 문자열에 RootViewController
문자열을 전달하려고 시도했다.
내는 다음과 같이 RootViewController.h
읽기 :
@interface RootViewController : UITabBarController {
@private
NSManagedObjectContext *managedObjectContext;
}
@property (nonatomic, retain) NSManagedObjectContext *managedObjectContext;
@end
내 RootViewController의 viewDidLoad에 방법 :
- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"%@", self.managedObjectContext);
ObiadViewController *obiadVC = [[ObiadViewController alloc] init];
ObiadListNavController *obiadListVC = [[ObiadListNavController alloc] init];
obiadVC.managedObjectContext = self.managedObjectContext;
obiadListVC.managedObjectContext = self.managedObjectContext;
NSArray *vcs = [NSArray arrayWithObjects:obiadVC, obiadListVC, nil];
self.viewControllers = vcs;
[obiadVC release];
[obiadListVC release];
가}
나는 또한 managedObjectContext
, 그냥 응용 프로그램 위임에 nil이 아니라고 확인 RootViewController
인스턴스로 전달됩니다. 그것은 마치 RootViewController
의 ivars가 초기화되는 것과 같습니다. 이 시점에서만 발생합니다. 나중에 뷰 컨트롤러에서 테이블 뷰 컨트롤러의 문자열을 전달하면 모든 것이 잘됩니다.
내가 분명히했으면 좋겠다. 나는 그 순간 꽤 우둔한 느낌이다.
NSLog (@ "% @", self.managedObjectContext)는 무엇입니까? 귀하의 TabBarController.m에서 출력? 만약 그것이 없다면 실제로 managedObjectContext를 nil에 두는 것입니다. obiadVC.managedObjectContext = self.managedObjectContext;가 아닌가? obiadVC.managedObjectContext = self.delegate.managedObjectContext; –
은 단순한 alloc/init 대신에'RootViewController * rootViewController = [[RootViewController alloc] initWithNibName : @ "RootViewController"번들 : nil]이 아닌가?; –