我想将一个视图控制器的日期分配给另一个
-(void) setCurrentDate:(NSDate newDate){
self.currentDate = newDate;
[self updateView];
}
调试时,我看到currentDate
值超出了范围,应用程序崩溃了EXC_BAD_ACCESS
。
任何帮助将不胜感激。
答案 0 :(得分:2)
除了你的setter应该通过指针取NSDate
(所有类型实例都通过Objective-C中的指针传递),你递归调用setter:
self.currentDate = foo
会导致[self setCurrentDate:foo]
被调用。
正确地应该看起来像像这样(假设nonatomic, retain
属性):
- (void)setCurrentDate:(NSDate *)newDate {
if (currentDate != newDate) {
[currentDate release];
[newDate retain];
currentDate = newDate;
[self updateView];
}
}
或者将该方法命名为与setter不同,以便您可以使用合成的setter:
- (void)updateDate:(NSDate *)newDate {
self.currentDate = newDate;
[self updateView];
}
答案 1 :(得分:1)
您需要将指针传递给日期。像这样:
-(void) setCurrentDate:(NSDate* newDate){
[self.currentDate release];
self.currentDate = newDate;
[self.currentDate retain];
[self updateView];
}
当然,您的currentDate
类变量也应该是NSDate指针。如果使用属性而不是自定义的setter,情况会更好。
答案 2 :(得分:0)
如果可能,你需要保留newDate或复制它。
我的意思是:
你也可以尝试NSZombieEnabled来捕捉这种错误。
答案 3 :(得分:0)
在您的方法名称中,您使用(NSDate日期)。你忘了包含“*”,这使它成为一个指针。正确的代码应该是
-(void) setCurrentDate:(NSDate *newDate){ // Notice the star after NSDate
self.currentDate = newDate;
[self updateView];
}