我正在尝试根据每天将JSON返回分为多个部分。这是JSON返回,
sales = (
{
"dis_dollars" = 0;
"dis_percent" = 0;
id = 111;
saleDay = 5;
saleMonth = 1;
saleTime = "20:02:39";
saleYear = 2014;
"total_price" = 25;
},
{
"dis_dollars" = 0;
"dis_percent" = 0;
id = 103;
saleDay = 2;
saleMonth = 1;
saleTime = "19:13:41";
saleYear = 2014;
"total_price" = 79;
},
{
"dis_dollars" = "0.55";
"dis_percent" = "0.10000000149012";
id = 101;
saleDay = 2;
saleMonth = 1;
saleTime = "10:41:11";
saleYear = 2014;
"total_price" = 22;
},
{
"dis_dollars" = 0;
"dis_percent" = 0;
id = 108;
saleDay = 1;
saleMonth = 1;
saleTime = "11:00:00";
saleYear = 2014;
"total_price" = 66;
}
);
}
如果我这样做,我可以获得部分数量
//...Connect to php script and get return json object
int saleDay = 0;
//Loop through json return
for (int i = 0;i < [sales count]; i++) {
NSDictionary* dict = [sales objectAtIndex:i];
Sale *eachSale =[[Sale alloc] initWithSaleId:[dict valueForKey:@"id"]
saleDay:[dict valueForKey:@"saleDay"]
saleMonth:[dict valueForKey:@"saleMonth"]
saleYear:[dict valueForKey:@"saleYear"]
saleTime:[dict valueForKey:@"saleTime"]
saleTotal:[dict valueForKey:@"total_price"]
saleDisDollars:[dict valueForKey:@"dis_dollars"]
saleDisPercent:[dict valueForKey:@"dis_percent"]];
NSLog(@"sale Day %@",eachSale.saleDay);
[_salesList addObject:eachSale];
int eachSaleDay = [eachSale.saleDay intValue];
// if the next day is different from the one before it, add a new section.
if (saleDay != eachSaleDay) {
_saleDaysCount += 1;
NSLog(@"eachSaleDay %i" ,eachSaleDay);
NSLog(@"salesDayCount %i" ,_saleDaysCount);
}
saleDay = eachSaleDay;
}
这将为我提供正确数量的部分,但是如何根据当天对对象进行分组以找出每个部分的行数以及每行应该包含哪些对象?
我想我需要使用NSSort描述符,但我不确定在哪里实现它以及如何访问单个日期数组。
有什么建议吗?
由于
答案 0 :(得分:0)
在循环搜索结果时,我只需添加一个NSNumber类型的附加字段,其中包含每个Sale
的完整日期。
eachSale.saleDateIdentifier = @(eachSale.saleYear.intValue * 10000 +
eachSale.saleMonth.intValue * 100 +
eachSale.saleDay.intValue);
现在很容易排序和计算:
[_salesList sortUsingDescriptors:
@[[NSSortDescriptor sortDescriptorWithKey:@"saleDateIdentifier" ascending:NO]]];
NSArray *allDates = [_salesList valueForKeyPath:@"saleDateIdentifier"];
NSSet *uniqueDates = [NSSet setWithArray:allDates];
NSArray *sortedUniqueDates = [uniqueDates sortedArrayUsingDescriptors:
@[[NSSortDescriptor sortDescriptorWithKey:@"saleDateIdentifier" ascending:NO]]];
您的部分数量为sortedUniqueDates.count
。对于每个部分,您可以使用saleDateIdentifier
格式化titleForRowAtIndexPath
中的日期字符串。
valueForKey
的init方法中使用eachSale
。也许你的意思是objectForKey
。更好的是,您应该键入Sale
类的属性,并根据需要使用NSNumber
和NSString
。