【问题标题】:How to store RestKit value to CoreData in iOS?如何在 iOS 中将 RestKit 值存储到 CoreData?
【发布时间】:2016-04-26 06:30:05
【问题描述】:

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

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

(NSArray *)getRegionData

我只是从我的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=映射操作无法在搜索的关键路径中找到任何嵌套对象表示: 发现输入到映射器的表示在以下关键路径中包含嵌套对象表示:地址、圆圈、连接编号、分布、负载、仪表编号、名称、阶段、区域、部分、服务编号、服务状态、使用情况 这可能表明您错误地配置了映射的关键路径。, NSLocalizedDescription=在搜索的关键路径中找不到可映射的对象表示。, keyPath=null}}}

【问题讨论】:

    标签: ios core-data mapping restkit nsmanagedobjectcontext


    【解决方案1】:

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

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

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

    第四个data.data,甚至data都没有在错误信息的关键路径中列出。您需要根据响应中的预期验证您的密钥路径,并在密钥路径中仅包含您需要深入研究以找到您想要映射的真实数据的那些密钥。

    因此,您需要检查许多潜在错误。

    【讨论】:

    • 谢谢..现在 Fethched 值是 HTML 格式..我认为问题可能出在 URL...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-25
    相关资源
    最近更新 更多