来自 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 0.20 映射问题(使用来自 API 的 JSON)