Ios JSONModel-使用&;实现键映射器
我将JSONModel用于返回JSON对象的基本应用程序 下面是我返回的数据示例:-关注Ios JSONModel-使用&;实现键映射器,ios,objective-c,json,jsonmodel,Ios,Objective C,Json,Jsonmodel,我将JSONModel用于返回JSON对象的基本应用程序 下面是我返回的数据示例:-关注tide对象 我正在尝试使用JSONModelJSONKeyMapper——这里的文档(向下滚动到中间)—— 我正试图找出如何实施它。我知道它也采取了类似的关键路径: 编辑:从我的断点: 这是json返回的结果: TIDEMAPPER.M #import "TideMapper.h" @implementation TideMapper +(JSONKeyMapper*)keyMapper {
tide
对象
我正在尝试使用JSONModelJSONKeyMapper
——这里的文档(向下滚动到中间)——
我正试图找出如何实施它。我知道它也采取了类似的关键路径:
编辑:从我的断点: 这是
json
返回的结果:
TIDEMAPPER.M
#import "TideMapper.h"
@implementation TideMapper
+(JSONKeyMapper*)keyMapper
{
return [[JSONKeyMapper alloc] initWithDictionary:@{
@"tide.tideInfo": @"tideSite",
@"tide.tideSummaryStats": @"maxheight",
}];
}
@end
#import "TideMapper.h"
@implementation TideMapper
+(JSONKeyMapper*)keyMapper
{
return [[JSONKeyMapper alloc] initWithDictionary:@{
@"tideSummaryStats.maxheight": @"maxheight",
@"tideSummaryStats.minheight": @"minheight",
@"tideInfo.lat": @"lat",
@"tideInfo.lon": @"lon"
}];
}
@end
TIDEMAPPER.M
#import "TideMapper.h"
@implementation TideMapper
+(JSONKeyMapper*)keyMapper
{
return [[JSONKeyMapper alloc] initWithDictionary:@{
@"tide.tideInfo": @"tideSite",
@"tide.tideSummaryStats": @"maxheight",
}];
}
@end
#import "TideMapper.h"
@implementation TideMapper
+(JSONKeyMapper*)keyMapper
{
return [[JSONKeyMapper alloc] initWithDictionary:@{
@"tideSummaryStats.maxheight": @"maxheight",
@"tideSummaryStats.minheight": @"minheight",
@"tideInfo.lat": @"lat",
@"tideInfo.lon": @"lon"
}];
}
@end
查看
@implementation TideDetailViewController
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:YES];
NSString *locationQueryURL = @"http://api.wunderground.com/api/xxxx/tide/geolookup/q/43.5263,-70.4975.json";
[JSONHTTPClient getJSONFromURLWithString: locationQueryURL
completion:^(NSDictionary *json, JSONModelError *err) {
// NSArray* results = [json valueForKeyPath:@"tide.tideInfo"];
_tide = [TideMapper arrayOfDictionariesFromModels:json];
NSLog(@"loans: %@", _tide);
}];
}
我想我需要将tide
更改为NSDictionary
——我认为它不会返回数组。这只是一个位置的单一结果
在调用此方法时,我被卡住了。有人有使用这个JSONModelKeyMapper的经验吗
谢谢您自己不需要调用此方法。模型类在加载时调用它一次,并获取字典映射,并在每次初始化模型副本时使用它 例如,当您调用initWithDictionary(或initWithJSONString)时,您的模型类将把每个JSON键映射到一个类属性,但是对于您在KeyMapper中列出的键,将执行以下操作:
- 它将获取JSON中的tideSummaryStats.maxheight值,并将其存储在类模型的“maxheight”属性中
- 它将采用tideSummaryStats的值。并将其存储在类模型的“minheight”属性中
- 等等等等
您的字典无效--不能有同一键值的多个副本。只需更新代码,不完整的示例。更新了我的键值。道歉。想法?你能把你的模型结构贴出来吗?你是如何定义它们的?@JanakNirmal刚刚添加到我的模型中structure@JanakNirmal有空的时候,我用我的模型和代码更新了我的问题。好的,谢谢,我猜它会映射到定义的每个属性。我学习了YT教程和Kiva feed教程。我特别查看了您发布的YT教程,以了解关键映射器是如何工作的。如果我这样设置,我会通过
tide.maxheight
访问它们吗如果arrayOfModelsFromDictionaries
接受一个NSArray
,我需要从返回的JSON(在我的问题中发布)传递一个NSDictionary
。我不能用那种方法。对吗?arrayOfModelsFromDictionaries接受一个NSArray参数,为什么要传递一个NSDictionary?我应该重写。我想看看是否有可能将我的字典转换为数组传递到ArrayOfModelsFromDictionares
——然后我就可以基于它构建我的模型了。因为我的第一级tide
不返回数组。我认为keyMapper
非常合适,因为它可以帮助我挑选和匹配需要从JSON中提取的项目。我认为这是不可能的