我有一个包含日期的数组。这是我的阵容。
"2015-03-01",
"2015-03-04",
"2015-03-05",
"2015-03-06",
"2015-03-07",
"2015-03-08",
"2015-03-14",
"2015-03-15"
根据此日期列出值。我的编码是
NSArray * datevalue = [tempArr valueForKey:@"match_formatted_date"];
NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"self" ascending:YES];
NSArray *descriptors = [NSArray arrayWithObject: descriptor];
NSArray *reverseOrder = [datevalue sortedArrayUsingDescriptors:descriptors];
NSPredicate *findFutureDates = [NSPredicate predicateWithBlock: ^BOOL(id obj, NSDictionary *bind){
NSDateFormatter *df = [[NSDateFormatter alloc]init];
[df setDateFormat:@"yyyy-MM-dd"];
[df setTimeZone:[NSTimeZone systemTimeZone]];
NSDate *dd = [df dateFromString:(NSString *)obj ];
return ([[NSDate date] compare:dd] == NSOrderedAscending);
}];
NSArray * arrFutureDates = [reverseOrder filteredArrayUsingPredicate: findFutureDates];
NSLog(@"arrFutureDates:%@",arrFutureDates);
for (id item in arrFutureDates)
{
if (![dataArr containsObject:item])
[dataArr addObject:item];
}
[dataArr sortUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
for (int i= 0; i<[dataArr count]-1; i++) {
for (id item in tempArr)
{
if([@"Mexico: Copa Mexico - Clausura" isEqualToString:[item valueForKey:@"league_name"]]
||[@"Mexico: Liga De Ascenso - Clausura" isEqualToString:[item valueForKey:@"league_name"]]
||[@"Mexico: Primera Division - Clausura" isEqualToString:[item valueForKey:@"league_name"]])
if([[dataArr objectAtIndex:i]isEqualToString:[item valueForKey:@"match_formatted_date"]])
{
NSMutableDictionary *tempDic =[[NSMutableDictionary alloc]init];
[tempDic setValue: [item valueForKey:@"match_formatted_date"] forKey:@"match_formatted_date"];
[tempDic setValue: [item valueForKey:@"league_name"] forKey:@"league_name"];
if (![titleheader containsObject:tempDic])
{
[titleheader addObject:tempDic];
}}}}
我的问题是:在标题标题中,空值即将到来。如果我犯了错误,任何人都可以帮助我。
答案 0 :(得分:0)
检查你的代码,你没有在任何地方初始化titleheader。在那种情况下,它将只是零。 在检查条件之前,初始化并为titleheader分配一些值。 或者我不知道你错过了粘贴代码。
答案 1 :(得分:0)
除了不可读的格式之外,您的代码中几乎没有问题,这可能会导致您的问题:
NSArray* datevalue = [tempArr valueForKey:@"match_formatted_date"];
名称建议tempArr
为NSArray
,但您以NSDictionary
的身份访问它。方法-valueForKey:
和-objectForKey:
之间存在差异。前者是与KVC相关的NSObject
方法,而后者是用于访问存储对象的NSDictionary
方法。他们经常感到困惑,因为NSDictionary
调用他们的行为方式相同。
for (int i= 0; i<[dataArr count]-1; i++) {
这个for
循环会跳过dataArr
中的最后一个对象,我认为这不是故意的。这可以通过i < dataArr.count
或i <= dataArr.count-1
修复。
另一个问题 - 与问题无关,但有机会学习:
NSMutableDictionary *tempDic =[[NSMutableDictionary alloc]init];
[tempDic setValue: [item valueForKey:@"match_formatted_date"] forKey:@"match_formatted_date"];
[tempDic setValue: [item valueForKey:@"league_name"] forKey:@"league_name"];
if (![titleheader containsObject:tempDic])
容器中的对象被存储并比较(默认情况下)作为引用,因此-containsObject
将始终返回NO
- 即使有另一个NSDictionary
具有相同的键值对。