5

Restkitを使用してWebサーバーAPIを呼び出そうとしていますが、機能していません。私のコントローラーはアクティビティインジケーターを表示するだけで、何も起こりません。

上位50本の動画を返すことを想定したAPI呼び出しがあります。例: http ://example.com/services/getTop50Video

戻り値は次の形式です。

<results>
<mysql_host>72.9.41.97</mysql_host>
<results>        
    <title/>
    <views/>
    <video_id>j2xFxHgENt4</video_id>
    <thumbnail>http://img.youtube.com/vi/j2xFxHgENt4/2.jpg</thumbnail>
    <url/>
</results>
...
</results>

私のアプリデリゲートコード

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

    // Configure RestKit Object Manager
    RKObjectManager* objectManager = [RKObjectManager objectManagerWithBaseURL:@"http://example.com/services"];

    RKObjectMapper* mapper =  objectManager.mapper;
    [mapper registerClass:[YouTubeVideo class] forElementNamed:@"video"];

     // Other non relevant stuff
}

TWYouTubeVideoクラス

@implementation TWYouTubeVideo

@synthesize title = _title;
@synthesize numberOfViews = _numberOfViews;
@synthesize videoID = _videoID;
@synthesize thumbnailURL = _thumbnailURL;


+ (NSDictionary*)elementToPropertyMappings {
    return [NSDictionary dictionaryWithKeysAndObjects:
            @"title", @"title",
            @"views", @"numberOfViews",
            @"video_id", @"videoID",
            @"thumbnail", @"thumbnailURL",
            nil];
}

私のコントローラーコード

-(id) initWithResourcePath:(NSString*) requestedResourcePath
{
    if (self = [super init])
    {
        self.resourcePath = requestedResourcePath;
    }
    return self;
}

- (void)createModel {
    self.model = [[[RKRequestTTModel alloc] initWithResourcePath:self.resourcePath] autorelease];
}


- (void)didLoadModel:(BOOL)firstTime {
    [super didLoadModel:firstTime];

    RKRequestTTModel* model = (RKRequestTTModel*)self.model;
    NSMutableArray* items = [NSMutableArray arrayWithCapacity:[model.objects count]];

        for (YouTubeVideo* video in model.objects) {
            TableSubtitleItem *item = [TableSubtitleItem itemWithText:video.title
                                                                 subtitle:[NSString stringWithFormat:@"%@ views", video.numberOfViews]
                                                                 imageURL:video.thumbnailURL
                                                             defaultImage:[YouTubeVideo defaultThumbnail]
                                                                      URL:nil
                                                             accessoryURL:nil];

            [items addObject:item];
        }


    // Ensure that the datasource's model is still the RKRequestTTModel;
    // Otherwise isOutdated will not work.
    TTListDataSource* dataSource = [TTListDataSource dataSourceWithItems:items];
    dataSource.model = model;
    self.dataSource = dataSource;
}

そしてコントローラーを押す

SecondYouTubeController* viewController = [[SecondYouTubeController alloc] initWithResourcePath:@"/getTop50VideoXML?json=true"];
[self.navigationController pushViewController:viewController animated:YES];
[viewController release];    

まず、ビデオオブジェクトが「応答」ノード内に表示されることをパーサーに伝える必要があると思います。第二に、私はすべての呼び出しを適切に行っているかどうかわかりません。

ここで助けていただければ幸いです。

4

2 に答える 2

2

RKRequestTTModelのkeyPathプロパティを「responses」に設定することで、「responses」要素にドリルダウンできます。

あなたの応答は実際にはXMLですか?現在、RestKitはXMLペイロードをサポートしていません(再び機能するようになるためのロードマップ上にあります)。JSONペイロードを取得できますか?そうでない場合で、良い戦いをしたいと思うなら、あなたがする必要があるのは、XMLをCocoaオブジェクト(辞書と配列)との間で変換できるRKParserプロトコルを実装することだけです。

于 2011-02-10T16:45:09.073 に答える
0

この質問は、XMLをRestKit0.20で動作させることを目的としています。

上記の回答の時点では不可能でした-現在は追加のモジュールを介しています: https ://github.com/RestKit/RKXMLReaderSerialization

これをPodfileに追加することで、これを利用できます。

pod 'RKXMLReaderSerialization', :git => 'https://github.com/RestKit/RKXMLReaderSerialization.git', :branch => 'master'

そして、このように使用するためにそれを登録します:

[RKMIMETypeSerialization registerClass:[RKXMLReaderSerialization class] forMIMEType:@"application/xml"];
于 2013-07-08T17:35:14.773 に答える