2011-08-17 29 views
1

我有以下语句:想不通这个NSDateComponents错误

NSDate *Today = [NSDate dateWithTimeIntervalSinceNow:0]; 
NSDate *cDate = [Lines objectAtIndex:(NSUInteger) 0]; 
NSLog(@"cDate: %@ Today: %@", cDate, Today); 
NSCalendar *calendar = [NSCalendar currentCalendar]; 
NSInteger desiredComponents = (NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit); 
NSDateComponents *secondComponents = [calendar components:desiredComponents fromDate:Today]; 
NSDateComponents *firstComponents = [calendar components:desiredComponents fromDate:cDate]; 

的NSLog语句打印:CDATE:2011-08-16十八点35分29秒+0000今天:2011-08-17 15 :53:19 +0000

最后一条语句(firstComponents),这是非常类似于以前的声明(secondComponents)崩溃,出现以下错误:无法识别 选择发送到实例

感谢您的帮助。

+1

确保cDate实际上是'NSDate'的一个实例。 'NSLog(@“cDate class:%@”,[cDate class]);' – Joe

+0

消息说WAS收到了什么选择?并通过什么类的实例? –

回答

2

检查cDate是否真的是NSDate的实例。它也可以是例如值为“2011-08-16 18:35:29 +0000”的NSString实例。

+0

不会声明:NSDate * cDate = [Lines objectAtIndex:(NSUInteger)0];将cDate定义为NSDate? – saman01

+0

不,它只是告诉编译器你期望它是一个NSDate,但objectAtIndex的返回类型是id,这意味着它可以是任何东西。 –

+0

谢谢,我现在明白了。 – saman01