[UITouchData timeIntervalSinceReferenceDate]:发送无法识别的选择器

时间:2014-09-16 06:27:06

标签: ios runtime-error unrecognized-selector

我不确定为什么我会收到此错误,UITouchData是什么?

我使用以下方法合并两个日期(日期和时间)。

- (NSDate *)combineDate:(NSDate *)date withTime:(NSDate *)time {

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

//crash at next line
unsigned unitFlagsDate = NSYearCalendarUnit | NSMonthCalendarUnit |  NSDayCalendarUnit;
NSDateComponents *dateComponents = [gregorian components:unitFlagsDate fromDate:date];

unsigned unitFlagsTime = NSHourCalendarUnit | NSMinuteCalendarUnit |  NSSecondCalendarUnit;
NSDateComponents *timeComponents = [gregorian components:unitFlagsTime fromDate:time];

[dateComponents setSecond:[timeComponents second]];
[dateComponents setHour:[timeComponents hour]];
[dateComponents setMinute:[timeComponents minute]];

NSDate *combDate = [gregorian dateFromComponents:dateComponents];

return combDate;

}

N.B。顺便说一句,我仔细检查了一下,我传递了日期和时间日期对象。

更新

我使用UIButton子类将选定的日期存储到其中,就像这样,

#import <UIKit/UIKit.h>

@interface TapButton : UIButton
@property (nonatomic, assign) NSDate *referenceDate;
@end

在存储日期时,我这样做,

TapButton *btnStartDate = [TapButton buttonWithType:UIButtonTypeCustom];
btnStartDate.referenceDate = _datePicker.date;

如果我将鼠标悬停在它上面,它会显示出来,

enter image description here

但是当我打印它时,会记录下来,

&lt; __ NSArrayM 0xe574340&gt;(

显而易见,现在错误消息已更改为此,

-[__NSArrayM timeIntervalSinceReferenceDate]: unrecognized selector sent to instance

我做错了什么?

2 个答案:

答案 0 :(得分:0)

有时你犯了真的 愚蠢 错误..! =)

错:

@interface TapButton : UIButton
@property (nonatomic, assign) NSDate *referenceDate;
@end

正确:

@interface TapButton : UIButton
@property (nonatomic, strong) NSDate *referenceDate;
@end

应指定非指针对象,其中指针对象应保留,因此在这种情况下,它应该是。谢谢@Birju

..但仍然主要的问题是为什么它改为`UITouchData`类型然后改为NSArray类型?

答案 1 :(得分:0)

检查你的对象是否真的是NSDate(而不是NSArray)!