如何将RestKit值存储到iOS中的CoreData?

时间:2016-01-20 12:04:12

标签: ios core-data mapping restkit nsmanagedobjectcontext

我创建了实体EY_REGION并添加了属性。要解析RestKit值并将数据存储在CoreData我创建了2个方法

(void)createRegionMappingWithStore:(RKManagedObjectStore *)managedObjectStore saveInDelegate:(AppDelegate *)appDelegate

(NSArray *)getRegionData

Just Am从我的NewConnectionViewController.m调用此方法。我的问题是,我无法获取数据。问题是什么?我在这里展示了我的代码:

DataAccessHandler.m

@implementation DataAccessHandler

+(void)createRegionMappingWithStore:(RKManagedObjectStore *)managedObjectStore saveInDelegate:(AppDelegate *)appDelegate{

RKEntityMapping *regionMapping = [RKEntityMapping mappingForEntityForName:@"EY_Region" inManagedObjectStore:managedObjectStore];
regionMapping.identificationAttributes = @[@"regionId"];
[regionMapping addAttributeMappingsFromDictionary:@{ @"id" : @"regionId", @"name" : @"regionName", @"code" : @"regionCode",@"last_update":@"lastUpdatedDate",@"is_delete":@"isDelete"}];

RKResponseDescriptor *regionResponseDescriptor =
[RKResponseDescriptor responseDescriptorWithMapping:regionMapping
                                             method:RKRequestMethodGET
                                        pathPattern:EY_REGION
                                            keyPath:@"data.data"
                                        statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)
 ];

[appDelegate createObjectManagerForurl:EY_BASE_URL andAddResponseDescriptor:regionResponseDescriptor];
[AFNetworkActivityIndicatorManager sharedManager].enabled = YES;
}

+(NSArray *)getRegionData{

NSManagedObjectContext *context = [RKManagedObjectStore defaultStore].mainQueueManagedObjectContext;
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"EY_Region"];

NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:@"regionId" ascending:YES];
fetchRequest.sortDescriptors = @[descriptor];

NSError *error = nil;
NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];
NSLog(@"fetched objects is: %@",fetchedObjects);
NSLog(@"size is: %lu",[fetchedObjects count]);
return fetchedObjects;
}

NewConnectionViewController.m

#import "NewConnectionViewController.h"
@implementation NewConnectionViewController

-(void)viewDidLoad
{

[super viewDidLoad];
[DataAccessHandler createConnectionMappingWithStore:[self managedObjectStore] saveInDelegate:[self appDelegate]];
[self requestConnectionData];
}

错误是,

NSLocalizedFailureReason =映射操作无法在搜索的关键路径中找到任何嵌套对象表示: 发现输入到映射器的表示包含以下关键路径的嵌套对象表示:Address,Circle,ConnectionNumber,Distribution,Load,MeterNo,Name,Phase,Region,Section,ServiceNo,ServiceStatus,usage 这可能表示您错误配置了映射的关键路径。,NSLocalizedDescription =在搜索的关键路径中找不到可映射的对象表示。,keyPath = null}}}

1 个答案:

答案 0 :(得分:0)

首先,您的请求(您没有显示代码)是异步的,因此在查询核心数据时它将无法完成。考虑使用获取的结果控制器而不是数组,以便在添加新数据时获得更新。

其次,您的请求网址(EY_BASE_URL)和路径模式(EY_REGION)(您都没有提供详细信息)需要匹配,以便路径模式是请求URL,未包含在对象管理器的基本URL中。

第三,错误显示keyPath=null,但您的响应描述符代码显示为keyPath:@"data.data",因此您显示的代码与实际运行的代码之间存在一些不匹配。

错误消息中的密钥路径中未列出第四个data.data,甚至data。您需要根据响应中的预期验证关键路径,并在键路径中仅包含您需要深入查找要映射的实际数据的那些键。

因此,您需要检查一些可能存在错误的事情。