我有这个代码:
在viewDidLoad
中:
dateForView = [[NSDate alloc] init]; (dateForView is a NSDate)
和IBAction:
- (IBAction) addDay{
NSLog(@"dateforview1:%@", dateForView);
dateForView = [dateForView dateByAddingTimeInterval:60*60*24*1];
NSDateFormatter *formatter =[[[NSDateFormatter alloc] init] autorelease];
[formatter setDateFormat:@"dd/MM/yyyy"];
[dataLabel setText:[formatter stringFromDate:dateForView]];
}
当我按下连接到该IBAction的按钮时,第一次没问题,但是下次崩溃。这是控制台崩溃的结果:
2011-06-01 11:29:55.238 Prenotazioni[554:707] dateforview1:(
"<UIControlTargetAction: 0x1962d0>"
)
2011-06-01 11:29:55.246 Project[554:707] -[__NSArrayI dateByAddingTimeInterval:]: unrecognized selector sent to instance 0x1ba680
2011-06-01 11:29:55.264 Project[554:707] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayI dateByAddingTimeInterval:]: unrecognized selector sent to instance 0x1ba680'
最佳答案
在viewDidLoad
中,您将获得一个拥有引用的NSDate
(因为您是用init
创建的)。第一次运行addDay
时,将其替换为自动发布的NSDate
,不再为其保留引用。当您离开addDay
时,对dateForView
的引用将无效,并且下次您输入addDay
并尝试对其进行递增操作时,您的应用程序将崩溃。解决方案是:
使用dateForView
策略将retain
设置为属性,
在self.dateForView = [NSDate date]
中使用viewDidLoad
。
在self.dateForView = [self.dateForView dateByAddingTimeInterval:60*60*24*1]
中使用addDay
。
另外,不要忘记在析构函数中设置self.dateForView = nil
以避免内存泄漏。
关于iphone - iOS:日期问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6199048/