まゆたまガジェット開発逆引き辞典

電子工作やプログラミングのHowtoを逆引き形式で掲載しています。作りたいモノを決めて学んでいくスタイル。プログラマではないので、コードの汚さはお許しを。参照していないものに関しては、コピペ改変まったく問いません

TabbarでCoreDataを使う

Githubにテンプレもどきのファイルが上げてあります。
GitHub - prince9/TabbarCoreDataSample: CoreData is used by TabBarView. TabBar+StoryboardでCoreDataを使うやり方です
データをユーザが追加するタイプのアプリで力を発揮する、データベースCoreData。
Master-Detail Applicationを選んでCoreDataにチェックを入れて・・・とやりやすくはなっていますが、TableViewの前にViewを追加したりTabbarを使うとなると話は別。
Tabbed Applicationを選んで後からCoreDataを追加してもシミュレータで落ちる・・・とまあなかなか難儀でして。
どうやらViewを追加したりすると、正確にCoreDataを移植してもエラーログで「データベースがオブジェクト参照できないよー」と言ってくるようです。

TabbarでCoreDataを使うという記事がなかったので、テンプレートもどきを作りました。
導入方法はReadMeを読んで頂くとして、追加したのは以下となります(Master-Detail Applicationを選んでCoreDataにチェックを入れて生成された部分を除く)。

・AppDelegate.h

@property (nonatomic,retain) UITabBarController *tabBarController;
@property (nonatomic,retain) MasterViewController *masterViewController;

・AppDelegate.m

@synthesize tabBarController;
@synthesize masterViewController;
と
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
} ここの中身に以下を追加
//ここがないと落ちる
    masterViewController.managedObjectContext = self.managedObjectContext;  
    [_window addSubview:tabBarController.view];
    [_window makeKeyAndVisible];

・MasterViewController.m

- (void)viewDidLoad
{
} ここの中身に以下を追加
//ここがないと落ちる
    __managedObjectContext = [(AppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext]; 
    NSLog(@"After managedObjectContext: %@",  __managedObjectContext);