如何将 RestKit 值存储到 iOS 中的 CoreData?
How to store RestKit value to CoreData in iOS?
我已经创建了实体 EY_REGION
并添加了 attributes.To 解析 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=映射操作无法在搜索的关键路径中找到任何嵌套对象表示:
发现输入到映射器的表示在以下关键路径包含嵌套对象表示:Address、Circle、ConnectionNumber、Distribution、Load、MeterNo、Name、Phase、Region、Section、ServiceNo、ServiceStatus、usage
这可能表明您错误配置了映射的关键路径。, NSLocalizedDescription=在搜索的关键路径中未找到可映射的对象表示。, keyPath=null}}}
首先,您的请求(您尚未显示其代码)是异步的,因此在您查询核心数据时它不会完成。考虑使用获取的结果控制器而不是数组,以便在添加新数据时获得更新。
其次,您的请求 URL (EY_BASE_URL
) 和路径模式 (EY_REGION
)(您都没有提供详细信息)需要匹配,以便路径模式是请求的部分 URL,它不包含在对象管理器的基础 URL 中。
第三,错误显示 keyPath=null
但您的响应描述符代码显示 keyPath:@"data.data"
因此您显示的代码与实际代码之间有些不匹配 运行.
第四个data.data
,甚至data
都没有在错误信息中列出关键路径。您需要根据您在响应中的预期验证您的关键路径,并在关键路径中仅包含您需要深入研究以找到您想要映射的真实数据的那些关键。
因此,您需要检查许多可能存在问题的地方。
我已经创建了实体 EY_REGION
并添加了 attributes.To 解析 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=映射操作无法在搜索的关键路径中找到任何嵌套对象表示: 发现输入到映射器的表示在以下关键路径包含嵌套对象表示:Address、Circle、ConnectionNumber、Distribution、Load、MeterNo、Name、Phase、Region、Section、ServiceNo、ServiceStatus、usage 这可能表明您错误配置了映射的关键路径。, NSLocalizedDescription=在搜索的关键路径中未找到可映射的对象表示。, keyPath=null}}}
首先,您的请求(您尚未显示其代码)是异步的,因此在您查询核心数据时它不会完成。考虑使用获取的结果控制器而不是数组,以便在添加新数据时获得更新。
其次,您的请求 URL (EY_BASE_URL
) 和路径模式 (EY_REGION
)(您都没有提供详细信息)需要匹配,以便路径模式是请求的部分 URL,它不包含在对象管理器的基础 URL 中。
第三,错误显示 keyPath=null
但您的响应描述符代码显示 keyPath:@"data.data"
因此您显示的代码与实际代码之间有些不匹配 运行.
第四个data.data
,甚至data
都没有在错误信息中列出关键路径。您需要根据您在响应中的预期验证您的关键路径,并在关键路径中仅包含您需要深入研究以找到您想要映射的真实数据的那些关键。
因此,您需要检查许多可能存在问题的地方。