基本的に、ユーザーがテレビ番組を追跡できるようにするアプリに取り組んでいます。ユーザーはテレビ番組をクリックして、シーズンとエピソードの内訳を取得できます。
これを実現するために、この API から JSON データを収集し、そのデータをコア データに格納しようとしています。API 呼び出しは次のとおりです: http://api.trakt.tv/show/summary.json/36590b30dc7d0db9ebd3153b1a989e5d/arrow/1
title、year、url、first_aired などの値を正常に保存できます。しかし、シーズンとエピソードの情報をコア データ (JSON API 呼び出しの約半分にある) に保存する方法がわかりません。
コア データ モデルの設定方法のスクリーンショットへのリンクを含めました。http://i546.photobucket.com/albums/hh427/camcham/ScreenShot2013-10-17at34449AM.png
以下のコードは、現在JSONデータをコアデータに保存しようとしている方法です( MagicalRecordsを使用)
NSManagedObjectContext *localContext = [NSManagedObjectContext MR_contextForCurrentThread];
Show *showp = [Show MR_findFirstByAttribute:@"sID" withValue:showID inContext:localContext];
if (![showp.sID isEqualToString:showID])
{
//Create New Show in current thread
Show *showContext = [Show MR_createInContext:localContext];
showContext.title = showTitle;
showContext.poster = showPoster;
showContext.year = showYear;
showContext.sID = showID;
//code above this comment correctly adds right JSON info to core data and i can access and display it properly
コードの次の部分では、NSArray を NSSet に変換しようとしました。これは、「季節」の関係が NSSet 型であるためですが、JSON データは NSArray であると思います。次のエラーが表示されます: *キャッチされない例外 'NSInvalidArgumentException' が原因でアプリを終了しています。理由: '-[__NSCFNumber managedObjectContext]: 認識されないセレクターがインスタンス 0xa22a680 に送信されました'
NSArray *show = [(NSSet *)[JSONEvents objectForKey:@"seasons"] valueForKey:@"season"];
showContext.seasons = [NSSet setWithArray:show];
以下のコードは意図したとおりに動作しません。たとえば、episode.title は、特定のエピソードの 1 つのタイトルだけでなく、すべてのエピソードのタイトルを保存します。
Season *season = [Season MR_createInContext:localContext];
season.seasonNumber = [(NSDictionary *)[JSONEvents objectForKey:@"seasons"] valueForKey:@"season"];
season.episodes = [(NSDictionary *)[JSONEvents objectForKey:@"seasons"] valueForKey:@"episodes"];
Episode *episode = [Episode MR_createInContext:localContext];
episode.title = [[(NSDictionary *)[season.episodes objectForKey:@"seasons"] valueForKey:@"episodes"] valueForKey:@"title"];
episode.overview = [[(NSDictionary *)[JSONEvents objectForKey:@"seasons"] valueForKey:@"episodes"] valueForKey:@"overview"];
要約すると、JSON API からテレビのシーズンとエピソードを保存する正しい方法を誰かに示してもらいたいです。そうすれば、このデータをアプリで利用できます!