【问题标题】:Changing NSDate on custom object?在自定义对象上更改 NSDate?
【发布时间】:2011-11-11 05:34:05
【问题描述】:

我的应用有一个包含 NSDate 的自定义对象。 我想在我的应用程序中更改此 NSDate,但这不可能吗?

代码:

所以这是我的对象中的一个方法,它应该根据另一个变量(sentcount)改变日期:

(void)increaseSentAttempts
{
sentCount++;

NSDate *cal = [NSDate date];

if (sentCount < 3) {
    //add 1 minute
    cal = [cal dateByAddingTimeInterval:60];
}
else if(sentCount < 10)
{
    //add 5 minutes
    cal = [cal dateByAddingTimeInterval:300];
}
else if(sentCount < 23)
{
    //add 1 hour
    cal = [cal dateByAddingTimeInterval:3600];
}
else {
    //add 15 hours
    cal = [cal dateByAddingTimeInterval:54000];
}


//sæt nextsent attribut
nextSendAttempt = cal;

}

nextSendAttempt 是我在自定义对象中的 NSDate。但是看到应用程序崩溃,nextsendattempt = cal;不可能。

【问题讨论】:

  • 这是完全可能的。发布一些代码,否则如果没有更多信息,我们将无法为您提供更多帮助。

标签: iphone ios nsdate


【解决方案1】:

您是否在自定义对象的 NSDate-Member 上设置了属性?

@interface MyClass : NSObject
{
    NSDate *myDate;
}
@property (retain) NSDate *myDate;
@end;

要更改该值:

MyClass *obj = ...;
NSDate *newDate = ...;
NSLog(@"oldDate: %@",obj.myDate);
obj.myDate = newDate;
NSLog(@"newDate: %@",obj.myDate);

【讨论】:

  • 那行不通。据我了解, NSDate 对象是不可变的。因此,就我在调试中看到的而言,简单地说 date = newdate 是行不通的。
  • 对我来说工作正常。 NSDate 是不可变的,但您没有修改 NSDate 中的某些值。我的代码所做的是:创建一个新的 NSDate-instance,只需修改指向 MyClass-instance 的 NSDate-instance 的指针。所以只是修改了指向 NSDate-instances 的指针,而不是 NSDate-instance 本身。
  • 我发现了我的错误,当然你的回答是正确的。
【解决方案2】:

愚蠢的愚蠢的我。 我需要写:

self.nextSendAttempt = cal;

这会很完美。

抱歉浪费您的时间:)

【讨论】:

  • nextSendAttemp = cal 原则上也可以工作,但新的 cal-obj 是在dateByAddingTimeInterval: 中新创建和自动发布的。因为您永远不会保留新的 NSDate 对象,所以 NSDate 对象将在稍后被销毁,并且在访问 NSDate 时会出现内存错误。所以保留只是丢失了,这是由nextSendAttemp-property 完成的,它可能被标记为(retain)
猜你喜欢
  • 1970-01-01
  • 2013-09-09
  • 1970-01-01
  • 2011-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-06
相关资源
最近更新 更多