来自 JSON 的 RestKit 对象映射

Posted

技术标签:

【中文标题】来自 JSON 的 RestKit 对象映射【英文标题】:RestKit Object Mapping from JSON 【发布时间】:2012-03-29 08:33:40 【问题描述】:

我正在尝试为以下 JSON 数据创建映射。


  "Calls": [
    
      "id": "18",
      "parent_id": "0",
      "status": "completed",
    ,
    
      "id": "19",
      "parent_id": "0",
      "status": "completed",
    ,

我正在使用以下方法来映射和处理来自委托的响应。当我运行它时,didLoadObjects 方法永远不会被命中,也不会记录任何内容。另外,我很肯定 URL 是正确的,并且 URL 返回了我在上面发布的 JSON。

- (void)viewDidLoad

    [super viewDidLoad];

    RKLogConfigureByName("RestKit/*", RKLogLevelTrace);

    RKObjectMapping *callMapping = [RKObjectMapping mappingForClass:[YCMDCall class]];

    [callMapping mapKeyPath:@"id" toAttribute:@"call_id"];
    [callMapping mapKeyPath:@"parent_id" toAttribute:@"parent_id"];
    [callMapping mapKeyPath:@"status" toAttribute:@"status"];

    RKObjectManager *manager = [[RKObjectManager sharedManager] managerWithBaseURL:@"http://MYBASEURL/"];
    [manager.mappingProvider setMapping:callMapping forKeyPath:@"Calls"];
    [manager loadObjectsAtResourcePath:@"RESTOFURL" objectMapping:callMapping delegate:self];


- (void)objectLoader:(RKObjectLoader*)objectLoader didLoadObjects:(NSArray*)objects

    NSLog(@"Load collection of Articles: %@", objects);


- (void)objectLoader:(RKObjectLoader *)objectLoader didFailWithError:(NSError *)error

    NSLog(@"Oh no! Error: %@", [error localizedDescription]);

另外,如果有人可以提供示例或指出正确的方向,将这些结果导入 TableViewController。提前感谢您的帮助。

@interface YCMDCall : NSObject

@property (nonatomic, retain) NSString* call_id;
@property (nonatomic, retain) NSNumber* parent_id;
@property (nonatomic, retain) NSString* status;

@end



@implementation YCMDCall

@synthesize call_id;
@synthesize parent_id;
@synthesize status;

@end

【问题讨论】:

您好,您的问题解决了吗? 是的,大部分只是忽略了一些简单的东西。 【参考方案1】:

您可以将重新定义的 NSArray 保存在一个单例的 Session 对象中,然后发布通知:

[MySessionObject getInstance].list = objects;
[[NSNotificationCenter defaultCenter] postNotificationName:@"YCMDCallSuccess" object: nil];

在你看来,你可以观察到这个通知:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onYCMDCallSuccess) name:@"YCMDCallSuccess" object:nil];

在您的 onYCMDCallSuccess 方法中,您可以访问会话对象中的数据

// For exemple
self.myList=[MySessionObject getInstance].list;

您可以查看此帖子了解更多详情:RestKit 0.9.3 app Structure

希望对您有所帮助。

编辑: 如果您的调用直接在您的视图控制器中,请查看您是否添加了 RKObjectLoaderDelegate

 @interface MyTableViewController : UITableViewController <RKObjectLoaderDelegate>

如果没有,你的回调函数将永远不会被调用:

- (void)objectLoader:(RKObjectLoader*)objectLoader didLoadObjects:(NSArray*)objects;
- (void)objectLoader:(RKObjectLoader *)objectLoader didFailWithError:(NSError *)error;

【讨论】:

感谢您的提示。做了一些修改,发现了一些语法错误。现在一切都解决了。

以上是关于来自 JSON 的 RestKit 对象映射的主要内容,如果未能解决你的问题,请参考以下文章

为浅层路由寻求最佳 RestKit/CoreData 映射和 JSON 结构的建议

使用 RESTkit 从 JSON 映射来自 NSManagedObject 的 NSString 数组

RestKit 对象映射 - 一个实体,两个映射

RestKit 0.20 映射问题(使用来自 API 的 JSON)

RestKit“无法在没有数据源的情况下执行关系映射”来自本地 JSON 文件

iPhone RestKit 是不是可以将核心数据对象图转换为 JSON?