我想要一个已经构建的xml,解析它,并且首先只添加xml中最旧的项目,然后每天再添加1个。用于解析的代码是:
- (void)parseRss:(GDataXMLElement *)rootElement entries:(NSMutableArray *)entries {
NSArray *channels = [rootElement elementsForName:@"channel"];
for (GDataXMLElement *channel in channels) {
NSString *blogTitle = [channel valueForChild:@"title"];
NSArray *items = [channel elementsForName:@"item"];
for (GDataXMLElement *item in items) {
NSString *articleTitle = [item valueForChild:@"title"];
NSString *articleUrl = [item valueForChild:@"guid"];
NSString *articleDateString = [item valueForChild:@"pubdate"];
NSDate *articleDate = [NSDate dateFromInternetDateTimeString:articleDateString formatHint:DateFormatHintRFC822];
NSString *articleImage = [item valueForChild:@"description"];
NSDateFormatter * dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setTimeStyle:NSDateFormatterShortStyle];
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];
RSSEntry *entry = [[[RSSEntry alloc] initWithBlogTitle:blogTitle
articleTitle:articleTitle
articleUrl:articleUrl
articleDate:articleDate
articleImage:articleImage
date:thedate] autorelease];
[entries addObject:entry];
}
}
}
如何更改此设置,以便只在首次启动应用时添加最旧的项目,依此类推?
答案 0 :(得分:0)
在我放入的AppDelegate didFinishLaunchingWithOptions方法中:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if (![defaults integerForKey:@"totalDays"]) {
// if there is no value for the key, set it to 0
[defaults setInteger:0 forKey:@"totalDays"];
[defaults synchronize];
}
if (![defaults objectForKey:@"currentDate"]) {
[defaults setObject:@"32 01" forKey:@"currentDate"];
//this will ensure that no one's start date ever matches current value
[defaults synchronize];
}
// get the current date
NSDate *date = [NSDate date];
// format it
NSDateFormatter *dateFormat = [[NSDateFormatter alloc]init];
[dateFormat setDateFormat:@"dd MM"];
// convert it to a string
NSString *dateString = [dateFormat stringFromDate:date];
// free up memory
[dateFormat release];
if ([defaults objectForKey:@"currentDate"]){
NSString *checkdate = [defaults objectForKey:@"currentDate"];
if (![dateString isEqualToString:checkdate]) {
//now if your current date is different from the last date it will add 1 to the total days key
NSInteger currentnumber = [defaults integerForKey:@"totalDays"];
NSLog(@"The current number is %i", currentnumber);
[defaults setObject:dateString forKey:@"currentDate"];
[defaults setInteger:currentnumber+1 forKey:@"totalDays"];
[defaults synchronize];
NSLog(@"The new number is %i", [defaults integerForKey:@"totalDays"]);
}
}
然后在NSPredicate的区域我补充说:
NSDate *start = [NSDate dateFromRFC3339String:@"2013-01-01T00:00:00-06:00"];
NSInteger difference = [[NSUserDefaults standardUserDefaults] integerForKey:@"totalDays"];
NSPredicate *predicate = [NSPredicate predicateWithFormat: @"articleDate < %@", [NSDate dateWithTimeInterval:(86400*difference) sinceDate:start]];
NSArray *filteredArray = [entries filteredArrayUsingPredicate: predicate];
最后一点代码希望能够达到最初的期望。