Objective c 目标NSC词典JSON在一行中

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

我正在开发一个objective C应用程序,在其中获取JSON数据,我需要将该数据(日期)插入字典中。我的FillDefaultColor的格式应如下所示:

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,它起作用了,谢谢