Iphone 更改自定义对象上的NSDate?

Iphone 更改自定义对象上的NSDate?,iphone,ios,nsdate,Iphone,Ios,Nsdate,我的应用程序有一个包含NSDate的自定义对象。 我想在我的应用程序中更改此NSDate,但这不可能吗 代码: 这是我的对象中的一个方法,它应该根据另一个变量(sentcount)更改日期: (无效)增加尝试次数 { sentCount++; NSDate*cal=[NSDate日期]; 如果(sentCount

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

代码:

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

(无效)增加尝试次数
{
sentCount++;
NSDate*cal=[NSDate日期];
如果(sentCount<3){
//加1分钟
cal=[cal dateByAddingTimeInterval:60];
}
否则如果(sentCount<10)
{
//再加5分钟
cal=[cal dateByAddingTimeInterval:300];
}
否则,如果(sentCount<23)
{
//加1小时
cal=[cal dateByAddingTimeInterval:3600];
}
否则{
//加15小时
cal=[cal dateByAddingTimeInterval:54000];
}
//sæt nextsent属性
NextSendTest=cal;
}


NextSendTest是自定义对象中的我的NSDate。但当应用程序崩溃时,nextSendTest=cal;不可能。

是否在自定义对象的NSDate成员上设置了属性

@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);
愚蠢的我。 我需要写:

self.nextSendAttempt = cal;
那很好用


很抱歉浪费您的时间:)

这是完全可能的。发布一些代码,否则我们将无法在没有进一步信息的情况下为您提供更多帮助。这是行不通的。据我所知,NSDate对象是不可变的。因此,简单地说date=newdate,在我的调试中并没有起到应有的作用
NSDate
是不可变的,但您没有修改NSDate中的某些值。我的代码所做的是:创建一个新的NSDate实例,只需修改指向MyClass实例的NSDate实例的指针。因此,只修改了指向NSDate实例的指针,而不是NSDate实例本身。我发现了错误,当然您的回答是正确的。
nextsendtemp=cal
原则上也可以工作,但新的cal obj是在
dateByAddingTimeInterval:
中新创建并自动删除的。由于您从未保留新的NSDate对象,因此NSDate对象稍后将被销毁,并且在访问NSDate时会出现内存错误。因此,retain刚好丢失,这是由
nextsendtemp
-属性完成的,该属性可能标记为
(retain)
self.nextSendAttempt = cal;