1

基本的に、ユーザーがテレビ番組を追跡できるようにするアプリに取り組んでいます。ユーザーはテレビ番組をクリックして、シーズンとエピソードの内訳を取得できます。

これを実現するために、この 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 からテレビのシーズンとエピソードを保存する正しい方法を誰かに示してもらいたいです。そうすれば、このデータをアプリで利用できます!

4

1 に答える 1