NSDate分配问题

时间:2010-07-11 15:38:51

标签: iphone objective-c

我想将一个视图控制器的日期分配给另一个

-(void) setCurrentDate:(NSDate newDate){
    self.currentDate = newDate;
    [self updateView];
}

调试时,我看到currentDate值超出了范围,应用程序崩溃了EXC_BAD_ACCESS

任何帮助将不胜感激。

4 个答案:

答案 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或复制它。

我的意思是:

  1. 您创建新日期
  2. 您调用setCurrentDate
  3. 您发布newDate
  4. [self updateView]尝试使用它并因为已经发布而失败。
  5. 你也可以尝试NSZombieEnabled来捕捉这种错误。

答案 3 :(得分:0)

在您的方法名称中,您使用(NSDate日期)。你忘了包含“*”,这使它成为一个指针。正确的代码应该是

-(void) setCurrentDate:(NSDate *newDate){ // Notice the star after NSDate

    self.currentDate = newDate;
    [self updateView];

}