2

だから私はRestKitを使ってRailsアプリからJSONで情報を取得しようとしています

そうするための私のコードは次のようなものです:

アプリデリゲート

@implementation AppDelegate

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

    //Initialise RestKit
    NSURL *URL = [NSURL URLWithString:@"https://myapp.dev"];
    AFHTTPClient* client = [[AFHTTPClient alloc] initWithBaseURL:URL];

    //Enable Activity Indicator Spinner
    [AFNetworkActivityIndicatorManager sharedManager].enabled = YES;


    [client setDefaultHeader:@"Accept" value:RKMIMETypeJSON];

    RKObjectManager *objectManager = [[RKObjectManager alloc] initWithHTTPClient:client];


    RKObjectMapping *eventMapping = [RKObjectMapping mappingForClass:[Info class]];

    [infoMapping addAttributeMappingsFromDictionary:@{
     @"sample":@"sample",
     @"sample_1":@"sample_1"
     }];

    RKResponseDescriptor *infoDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:infoMapping
                                                                                        pathPattern:@"/info"
                                                                                        keyPath:nil
                                                                                        statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];

    [objectManager addResponseDescriptor:infoDescriptor];
}

ファイルを閲覧する

- (void)loadInfo
{

    RKObjectManager *objectManager = [RKObjectManager sharedManager];

    [objectManager getObjectsAtPath:@"/info"
                         parameters:nil
                            success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {

                                NSArray *info = [mappingResult array];

                                NSLog(@"Loaded info: %@", info);


                                _info = info;


                            } failure:^(RKObjectRequestOperation *operation, NSError *error) {

                                UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error getting into"
                                                                                message:[error localizedDescription]
                                                                                delegate:nil
                                                                                cancelButtonTitle:@"OK"
                                                                                otherButtonTitles:nil];
                                [alert show];
                                NSLog(@"Hit error: %@", error);

                            }];
}

問題は。ログ出力で、RestKitはすべてを正常にマップすることを通知します。しかし、ビューファイルにログインする方法とデバッガーを使用してオブジェクトを表示しようとするとpo、次のようになります。

374 Finished performing object mapping. Results: {
    "<null>" = "<Info: 0xa291b30>";
}

オブジェクトを表示できず、ブレークポイントがあると次のように表示されます。

オブジェクトは存在しますが、表示できません

私はこれに数日間苦労してきましたが、他に何を試すべきかわかりません。どんな助けでも大歓迎です

4

3 に答える 3

2

私は同様の問題に遭遇しました。理由はよくわかりませんが、次のようにすると修正されました。

- (void)loadInfo
{

    RKObjectManager *objectManager = [RKObjectManager sharedManager];

    [objectManager getObjectsAtPath:@"/info"
                         parameters:nil
                            success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {

                                NSArray *info = [mappingResult array]; 
                                NSLog(@"Loaded info: %@", info);                                  
                                _info = info;


                            } failure:^(RKObjectRequestOperation *operation, NSError *error) {

                                UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error getting into"
                                                                                message:[error localizedDescription]
                                                                               delegate:nil
                                                                      cancelButtonTitle:@"OK"
                                                                      otherButtonTitles:nil];
                                [alert show];
                                NSLog(@"Hit error: %@", error);

                            }];
}


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

    //Initialise RestKit
    NSURL *URL = [NSURL URLWithString:@"https://myapp.dev"];
    AFHTTPClient* client = [[AFHTTPClient alloc] initWithBaseURL:URL];

    //Enable Activity Indicator Spinner
    [AFNetworkActivityIndicatorManager sharedManager].enabled = YES;


    [client setDefaultHeader:@"Accept" value:RKMIMETypeJSON];

    RKObjectManager *objectManager = [[RKObjectManager alloc] initWithHTTPClient:client];


    RKObjectMapping *eventMapping = [RKObjectMapping mappingForClass:[Info class]];

    [infoMapping addAttributeMappingsFromDictionary:@{
     @"sample":@"sample",
     @"sample_1":@"sample_1"
     }];

    RKResponseDescriptor *infoDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:infoMapping
                                                                                        pathPattern:@"/info/:id"
                                                                                        keyPath:nil
                                                                                        statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];

    [objectManager addResponseDescriptor:infoDescriptor];
}
于 2013-01-02T01:07:54.907 に答える
1

ネストされたkeyPathを持たないオブジェクト表現をロードすると、RestKitはマップされたオブジェクトを[NSNull null]ディクショナリ内のキーの下に格納します(nil有効なディクショナリキーではないため)。firstObject、、arrayまたはオブジェクトを呼び出してマップされdictionaryRKMappingResultオブジェクトにアクセスすることにより、マッピング結果を取得できます。

配列を単一のオブジェクトにマッピングすることについてのフォローアップの質問があります...JSONはどのように見え、どのように表現しようとしていますか?

于 2013-01-04T12:36:40.947 に答える
-1
 RKResponseDescriptor *infoDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:infoMapping
                                                                                    pathPattern:nil
                                                                                    keyPath:nil
                                                                                    statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];
于 2013-01-03T03:16:51.163 に答える