0

我有带有字典列表(item0,item1,item2)的列表的Plist。我在图表中填充这个plist..它工作正常。在Plist中key (date)-> Value(i store by using NSDate)。现在我需要以这样的方式对Plist进行排序:- graph应该仅显示一周。说如果第一个值26-Dec-12不仅仅是最多1-Jan-13(1周)值plist应该显示

第一的 .

代码

- (NSArray *)readFromPlist
{
// get paths from root direcory
NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
                                                             NSUserDomainMask, YES); 
NSString *documentsDirectory = [documentPaths objectAtIndex:0];
NSString *documentPlistPath = [documentsDirectory stringByAppendingPathComponent:@"calori.plist"];

NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:documentPlistPath];

valueArray = [dict objectForKey:@"title"];

  return valueArray;
}

- (void)drawRect:(CGRect)rect {
// Drawing code


    CGContextRef _context = UIGraphicsGetCurrentContext();
ECGraph *graph = [[ECGraph alloc] initWithFrame:CGRectMake(10,10, 480, 320) 
                                    withContext:_context isPortrait:NO];

NSMutableArray *Array=[NSMutableArray arrayWithArray:[self readFromPlist]];


NSMutableArray *items = [[NSMutableArray alloc] init];

for (id object in [Array reverseObjectEnumerator]){

    if ([object isKindOfClass:[NSDictionary class]])
    {
        NSDictionary *objDict = (NSDictionary *)object;


           tempItemi  =[[ECGraphItem alloc]init];

        NSString *str=[objDict objectForKey:@"title"];
        NSLog(@"str value%@",str);
        float f=[str floatValue];


        NSString*str1=[objDict objectForKey:@"date"];

        NSLog(@" str values2-- %@",str1);

        tempItemi.isPercentage=YES;
        tempItemi.yValue=f;

        tempItemi.name=str1;



         [items addObject: tempItemi];



    }
}

[graph drawHistogramWithItems:items lineWidth:2 color:[UIColor blackColor]];
}
4

3 回答 3

1

您是否尝试过使用 NSSortDescriptor?

NSSortDescriptor *sortDesc = [[NSSortDescriptor alloc] initWithKey:@"DATE" ascending:YES selector:@selector(compare:)];
[yourDictionary sortUsingDescriptors:[NSArray arrayWithObject:sortDesc]];
于 2012-12-26T11:28:53.650 回答
1

试试这个

NSString *path = [[NSBundle mainBundle] pathForResource:@"yourfile" ofType:@"plist"];
    NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:path];
    // sort it
    NSArray *sortedArray = [[myDict allKeys] sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];
    // iterate and print results
    for(NSString *key in sortedArray) {
        NSLog(@"key=%@,value=%@", key, [dict objectForKey:key]);
    }
于 2012-12-26T11:34:24.500 回答
1

由于您的要求是在 7 天内过滤日期,

我给你一个逻辑,试试这个方法:

- (NSArray *)readFromPlistForOneWeek {

    NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES); 
    NSString *documentsDirectory = [documentPaths objectAtIndex:0];
    NSString *documentPlistPath = [documentsDirectory stringByAppendingPathComponent:@"calori.plist"];


    NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:documentPlistPath];

    //loop through each of the item
    //and check if <8 then add that keyValue to array
    NSMutableArray *tempValueArray=[NSMutableArray new];
    for (NSDictionary *subDict in [dict objectForKey:@"title"]) {
       // NSLog(@"=> %@",subDict);

        NSString *plistDateString=[subDict objectForKey:@"date"];
        NSDate *currentDate = [NSDate date];

        NSDateFormatter *dateFormatter=[NSDateFormatter new];
        [dateFormatter setDateFormat:@"dd-MMM-yy"];

        NSDate *plistDate=[dateFormatter dateFromString:plistDateString];

        NSString *currentDateString=[dateFormatter stringFromDate:currentDate];

        NSTimeInterval secondsBetween = [plistDate timeIntervalSinceDate:currentDate];
        NSInteger dateDiff = secondsBetween / 86400;

        if( dateDiff<8 ){ //within 0-7 days
            [tempValueArray addObject:subDict];
        }
    }

    NSLog(@"valuArray : %@",tempValueArray);

    return tempValueArray;
}
于 2012-12-26T11:39:55.417 回答