我正在制作电视指南应用程序,并试图从NSArray和NSDictionary中获取最近的3个日期。到目前为止这么好,但我一直在试图弄清楚如何使用尽可能少的内存和尽可能少的代码(从而减少错误或崩溃的可能性)这样做的最佳方式。数组已经排序。从列表中挑选最近的3个日期
我有一本包含所有频道节目一天的字典。该字典隐藏了一个NSDate(称为日期)。
可以说一个频道有8个节目,现在时间是11:45。展会#3从11:00开始,到12:00结束,#4从12:00开始到13:00结束,#5在13:00到14:00之间展示。
我怎样才能取得节目#3 (从过去开始!),#4和#5是我的字典数组中最快(记忆智慧)和最简单的方式吗?
目前我正在做一个for循环提取每个字典,然后比较字典日期和当前日期。那就是我陷入困境的地方。或者,也许我只是有一个大脑fag。
我当前的代码(同时测试不同的事情后):
- (NSArray*)getCommingProgramsFromDict:(NSArray*)programs amountOfShows:(int)shows
{
int fetched = 0;
NSMutableArray *resultArray = [[NSMutableArray alloc] init];
NSDate *latestDate = [NSDate date];
for (NSDictionary *program in programs)
{
NSDate *startDate = [program objectForKey:@"date"];
NSLog(@"Program: %@", program);
switch ([latestDate compare:startDate]) {
case NSOrderedAscending:
NSLog(@"latestDate is older, meaning the show starts in the future from latestDate");
// do something
break;
case NSOrderedSame:
NSLog(@"latestDate is the same as startDate");
// do something
break;
case NSOrderedDescending:
NSLog(@"latestDate is more recent, meaning show starts in the past");
// do something
break;
}
// Now what?
}
return resultArray;
}
我写它的iOS 5,采用ARC。
这似乎是正确的,我也试过它..但似乎iOS5(ARC)不喜欢它。我得到'BOOL(^)(__ strong id,NSUInteger,BOOL *)'[3]''类型的参数'void(^)(__ strong id,NSUInteger,BOOL *)'的不兼容块指针类型发送错误消息'''还有,我的理解是否正确,你错过了'];'在最后? –
我删除了我的其他评论,这对我也不起作用。 。 –
对不起,没有测试我的代码,你对错过的']'是正确的,另一个问题与iOS5或ARC无关。问题是我的块没有返回值(我忘了'return YES'语句),所以编译器断言该块返回'void',而它期望一个返回'BOOL'的块(根据'indexOfObjectPassingTest:'方法签名)。我刚编辑我的代码来解决这些问题,在同一时间简化块('indexOfObjectPassingTest'自动停止在第一个匹配,所以我是不确定在该方法的情况下需要“* stop”) – AliSoftware