我正在製作電視指南應用程序,並試圖從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