我有这个代码:

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/

10-09 20:48