【问题标题】:Could not find an object mapping for keyPath: ''找不到 keyPath 的对象映射:''
【发布时间】:2011-12-04 14:11:54
【问题描述】:

我正在尝试使用 RestKit 与提供新闻项目的 Web 服务进行通信。我研究了this piece 的文档,并在此基础上编写了此代码

//
//  NewsViewController_iPhone.m

#import "NewsViewController_iPhone.h"
#import <RestKit/RestKit.h>
#import <RestKit/CoreData/CoreData.h>
#import "NewsPost.h"

@implementation NewsViewController_iPhone

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        RKObjectManager* manager = [RKObjectManager objectManagerWithBaseURL:@"http://192.168.0.197:3000"];

        RKObjectMapping* newsPostMapping = [RKObjectMapping mappingForClass:[NewsPost class]];
        [newsPostMapping mapKeyPath:@"title" toAttribute:@"title"];
        [newsPostMapping mapKeyPath:@"body" toAttribute:@"body"];
        [newsPostMapping mapKeyPath:@"image" toAttribute:@"image"];
        [newsPostMapping mapKeyPath:@"date" toAttribute:@"date"];

        [manager.mappingProvider setMapping:newsPostMapping forKeyPath:@"news_items"];

        [manager loadObjectsAtResourcePath:@"/news.json"delegate:self];
    }
    return self;
}

- (void)dealloc
{
    [super dealloc];
}

- (void)didReceiveMemoryWarning
{
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

    // Release any cached data, images, etc that aren't in use.
}

#pragma mark - View lifecycle

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
}

- (void)viewDidUnload
{
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

- (void)objectLoader:(RKObjectLoader *)objectLoader didFailWithError:(NSError *)error
{
    NSString *stringError = @"Ett problem uppstod vid hämtning av nyheter";

    NSLog(stringError);

    /*UIAlertView *alert = [[UIAlertView alloc] initWithTitle:stringError];
    [alert show];
    [alert release];*/

}


- (void)request:(RKRequest*)request didLoadResponse: 
(RKResponse*)response { 
    if ([request isGET]) { 
        if ([response isOK]) { 
            NSLog(@"Retrieved JSON: %@", [response bodyAsString]); 
        } 
    } else if ([request isPOST]) { 
        if ([response isJSON]) { 
            NSLog(@"Got a JSON response back from our POST!"); 
        } 
    } 
}

- (void)objectLoader:(RKObjectLoader *)objectLoader didLoadObjects:(NSArray *)objects
{
    NSLog(@"%@", objects);
}

我得到以下日志输出

2011-10-10 15:57:40.807 App[94979:207] Retrieved JSON: {"news_posts":[{"title":"test title","body":"test body","image":"/uploads/post/image/1/app_iPhone.png","date":"10/10 2011"}]}
2011-10-10 15:57:40.808 App[94979:7507] W restkit.object_mapping:RKObjectMapper.m:74 Adding mapping error: Could not find an object mapping for keyPath: ''
2011-10-10 15:57:40.809 App[94979:7507] E restkit.network:RKObjectLoader.m:190 Encountered errors during mapping: Could not find an object mapping for keyPath: ''
2011-10-10 15:57:40.809 App[94979:7507] Ett problem uppstod vid hämtning av nyheter

但这对我来说没有多大意义。有谁知道问题出在哪里?

【问题讨论】:

    标签: objective-c ios json restkit jsonkit


    【解决方案1】:

    我认为您必须先使用setMapping:forKeyPath: 设置映射,然后才能访问它下面的关键路径。

    另外,您在setMapping 方法中使用了字符串@"news_items"。但是,在您的 JSON 提要中,它显示 @"news_posts"。

    【讨论】:

    • 这很尴尬。太感谢了。字符串的更正解决了我的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-08
    • 1970-01-01
    • 1970-01-01
    • 2013-08-01
    • 2019-05-27
    相关资源
    最近更新 更多