Objective c 目标NSC词典JSON在一行中
我正在开发一个objective C应用程序,在其中获取JSON数据,我需要将该数据(日期)插入字典中。我的FillDefaultColor的格式应如下所示:Objective c 目标NSC词典JSON在一行中,objective-c,Objective C,我正在开发一个objective C应用程序,在其中获取JSON数据,我需要将该数据(日期)插入字典中。我的FillDefaultColor的格式应如下所示: self.fillDefaultColors = @{ @"2017/06/18":greenColor, @"2017/06/19":orangeColor, @"2017/06/20":greenColor
self.fillDefaultColors = @{ @"2017/06/18":greenColor,
@"2017/06/19":orangeColor,
@"2017/06/20":greenColor,
...
};
但当我在控制台日志中打印时,它们都在单独的行中,在应用程序中,我可以看到JSON中最后一项的颜色
2017-06-19 15:30:12.310 CalendarTest[1905:364525] {
"2017/06/20" = "greenColor";
}
2017-06-19 15:30:12.311 CalendarTest[1905:364525] {
"2017/06/18" = "orangeColor";
}
所以在应用程序中,我在控制台2017/06/18中看到了最后日期的背景
这是我的密码
NSError *error = nil;
NSURL *url = [NSURL URLWithString: @"http://..."];
NSData *data = [NSData dataWithContentsOfURL:url options:NSDataReadingUncached error:&error];
if(!error)
{
NSDictionary* json = [NSJSONSerialization
JSONObjectWithData:data
options:NSJSONReadingMutableContainers
error:&error];
NSMutableArray *array= [json objectForKey:@"horses"];
for(int i=0; i< array.count; i++)
{
NSDictionary *horsedata = [array objectAtIndex:i];
NSString *date = [horsedata objectForKey:@"date"];
NSNumber *averagetemp = [horsedata objectForKey:@"averagetemperature"];
if([averagetemp isEqual:@(28)]) {tempColor = greenColor;} else {
tempColor = orangeColor;
}
self.fillDefaultColors = @{date: tempColor};
NSLog(@"%@", _fillDefaultColors);
}
}
JSON: {"horses":[{"id":1,"name":"Horse","date":"2017/06/17","averagetemperature":28},{"id":1,"name":"Horse","date":"2017/06/18","averagetemperature":25}]}
Thanks
NSError*error=nil;
NSURL*url=[NSURL URLWithString:@”http://..."];
NSData*data=[NSData dataWithContentsOfURL:url选项:NSDataReadingUncached错误:&错误];
如果(!错误)
{
NSDictionary*json=[NSJSONSerialization
JSONObjectWithData:数据
选项:NSJSONReadingMutableContainers
错误:&错误];
NSMutableArray*数组=[json objectForKey:@“horses”];
对于(int i=0;i
这是因为您在每次迭代中都分配了一个新字典:
self.fillDefaultColors = @{date: tempColor};
您需要添加以下内容:
NSMutableArray *array= [json objectForKey:@"horses"];
self.fillDefaultColors = [[NSMutableDictionary alloc]init];
for(int i=0; i< array.count; i++)
{
NSDictionary *horsedata = [array objectAtIndex:i];
NSString *date = [horsedata objectForKey:@"date"];
NSNumber *averagetemp = [horsedata objectForKey:@"averagetemperature"];
if([averagetemp isEqual:@(28)]) {tempColor = greenColor;} else {
tempColor = orangeColor;
}
[self.fillDefaultColors setObject:tempColor forKey:date];
NSLog(@"%@", _fillDefaultColors);
}
NSMutableArray*array=[json objectForKey:@“horses”];
self.FillDefaultColor=[[NSMutableDictionary alloc]init];
对于(int i=0;i
这是因为您在每次迭代中都分配了一个新字典:
self.fillDefaultColors = @{date: tempColor};
您需要添加以下内容:
NSMutableArray *array= [json objectForKey:@"horses"];
self.fillDefaultColors = [[NSMutableDictionary alloc]init];
for(int i=0; i< array.count; i++)
{
NSDictionary *horsedata = [array objectAtIndex:i];
NSString *date = [horsedata objectForKey:@"date"];
NSNumber *averagetemp = [horsedata objectForKey:@"averagetemperature"];
if([averagetemp isEqual:@(28)]) {tempColor = greenColor;} else {
tempColor = orangeColor;
}
[self.fillDefaultColors setObject:tempColor forKey:date];
NSLog(@"%@", _fillDefaultColors);
}
NSMutableArray*array=[json objectForKey:@“horses”];
self.FillDefaultColor=[[NSMutableDictionary alloc]init];
对于(int i=0;i
这是与侯赛因回答中相同的解决方案,但使用了现代Objective-C语法——至少在5年前就引入了这种语法
NSArray *horses = json[@"horses"];
self.fillDefaultColors = [[NSMutableDictionary alloc] init];
for (NSDictionary *horsedata in horses)
{
NSString *date = horsedata[@"date"];
NSNumber *averagetemp = horsedata[@"averagetemperature"];
self.fillDefaultColors[date] = (averagetemp.integerValue == 28) ? greenColor : orangeColor;
NSLog(@"%@", _fillDefaultColors);
}
这与侯赛因的回答中的解决方案相同,但使用了现代Objective-C语法——这一语法至少在5年前就引入了
NSArray *horses = json[@"horses"];
self.fillDefaultColors = [[NSMutableDictionary alloc] init];
for (NSDictionary *horsedata in horses)
{
NSString *date = horsedata[@"date"];
NSNumber *averagetemp = horsedata[@"averagetemperature"];
self.fillDefaultColors[date] = (averagetemp.integerValue == 28) ? greenColor : orangeColor;
NSLog(@"%@", _fillDefaultColors);
}
self.fillDefaultColors=@{date:tempColor}代码>每次都要覆盖self.fillDefaultColors
<代码>[self.fillDefaultColors设置对象:tempColor-forKey:date]代码>,您需要在某处执行self.fillDefaultColors=[[NSMutableDictionary alloc]init]代码>请注意,如果您有一些日期
值相等,则将替换对象
(值),因为键具有唯一性。除此之外,切勿使用同步方法(如dataWithContentsOfURL
)从远程URL加载数据。它将阻止当前线程。为什么要传递选项NSJSONReadingMutableContainers
,但将结果分配给一个不可变的对象?@vadian我对objective c不熟悉,我在internet教程中发现了这段代码……非常糟糕的教程,找一个更好的,不幸的是,没有质量检查,每个业余爱好者都可以传播他肤浅的知识。@Larme它正在工作,谢谢你self.fillDefaultColors=@{date:tempColor}代码>每次都要覆盖self.fillDefaultColors
<代码>[self.fillDefaultColors设置对象:tempColor-forKey:date]代码>,您需要在某处执行self.fillDefaultColors=[[NSMutableDictionary alloc]init]代码>请注意,如果您有一些日期
值相等,则将替换对象
(值),因为键具有唯一性。除此之外,切勿使用同步方法(如dataWithContentsOfURL
)从远程URL加载数据。它将阻止当前线程。为什么要传递选项NSJSONReadingMutableContainers
,但将结果分配给一个不可变的对象?@vadian我对objective c不熟悉,我在internet教程中发现了这段代码……非常糟糕的教程,找一个更好的,不幸的是,这里没有质量检查,每个业余爱好者都可以传播他的肤浅知识。@Larme,它起作用了,谢谢