Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 日期问题_Iphone_Objective C_Xcode_Ios_Nsdate - Fatal编程技术网

Iphone 日期问题

Iphone 日期问题,iphone,objective-c,xcode,ios,nsdate,Iphone,Objective C,Xcode,Ios,Nsdate,我有以下代码: 在viewDidLoad中: dateForView = [[NSDate alloc] init]; (dateForView is a NSDate) 和一个IBAction: - (IBAction) addDay{ NSLog(@"dateforview1:%@", dateForView); dateForView = [dateForView dateByAddingTimeInterval:60*60*24*1]; NSDateFormat

我有以下代码:

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]];
}
当我按下一个连接到此iAction的按钮时,第一次一切正常,但下一次就会崩溃。这是控制台崩溃的结果:

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'
2011-06-01 11:29:55.238 Prenotazioni[554:707]日期查看1:(
""
)
2011-06-01 11:29:55.246项目[554:707]-[\uu NSArrayI dateByAddingTimeInterval:]:发送到实例0x1ba680的无法识别的选择器
2011-06-01 11:29:55.264项目[554:707]***由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:'-[\uu NSArrayI dateByAddingTimeInterval::]:未识别的选择器发送到实例0x1ba680'

viewDidLoad
中,您将获得一个
NSDate
,您为其保存了一个引用(因为您使用
init
创建了它)。第一次运行
addDay
时,将其替换为自动删除的
NSDate
,您不再持有该日期的引用。当您离开
addDay
时,此对
dateForView
的引用将无效,下次您输入
addDay
并尝试递增时,您的应用程序将崩溃。解决办法是:

  • 使
    dateForView
    成为具有
    retain
    策略的属性
  • viewDidLoad
    中使用
    self.dateForView=[NSDate date]
  • 使用
    self.dateForView=[self.dateForView dateByAddingTimeInterval:60*60*24*1]
    中的
    addDay

  • 另外,不要忘记在析构函数中设置
    self.dateForView=nil
    ,以避免内存泄漏。

    viewdiload
    中,您将获得一个
    NSDate
    ,您将为其保存一个引用(因为您是使用
    init
    创建它的)。第一次运行
    addDay
    时,将其替换为自动删除的
    NSDate
    ,您不再持有该日期的引用。当您离开
    addDay
    时,此对
    dateForView
    的引用将无效,下次您输入
    addDay
    并尝试递增时,您的应用程序将崩溃。解决办法是:

  • 使
    dateForView
    成为具有
    retain
    策略的属性
  • viewDidLoad
    中使用
    self.dateForView=[NSDate date]
  • 使用
    self.dateForView=[self.dateForView dateByAddingTimeInterval:60*60*24*1]
    中的
    addDay

  • 另外,不要忘记在析构函数中设置self.dateForView=nil,以避免内存泄漏。

    可能是因为dateForView被释放。要解决此问题,请使用[dateForView retain];但这将增加内存

    可能是因为dateForView被释放。要解决此问题,请使用[dateForView retain];但是这会增加内存

    我已经执行了你的代码

    您必须更改此行:-

    NSDateFormatter *formatter =[[[NSDateFormatter alloc] init] autorelease];
    
    to
    NSDateFormatter *formatter =[[NSDateFormatter alloc] init];
    and at last 
    [formatter release];
    
    like:-
    
    - (IBAction) addDay{
    
        NSLog(@"dateforview1:%@", dateForView);
        dateForView = [dateForView dateByAddingTimeInterval:60*60*24*1];
        NSDateFormatter *formatter =[[NSDateFormatter alloc] init];
        [formatter setDateFormat:@"dd/MM/yyyy"];
        [dataLabel setText:[formatter stringFromDate:dateForView]]; 
        [formatter release];
    
    }
    

    我已经执行了你的代码

    您必须更改此行:-

    NSDateFormatter *formatter =[[[NSDateFormatter alloc] init] autorelease];
    
    to
    NSDateFormatter *formatter =[[NSDateFormatter alloc] init];
    and at last 
    [formatter release];
    
    like:-
    
    - (IBAction) addDay{
    
        NSLog(@"dateforview1:%@", dateForView);
        dateForView = [dateForView dateByAddingTimeInterval:60*60*24*1];
        NSDateFormatter *formatter =[[NSDateFormatter alloc] init];
        [formatter setDateFormat:@"dd/MM/yyyy"];
        [dataLabel setText:[formatter stringFromDate:dateForView]]; 
        [formatter release];
    
    }
    

    如果您决定这样做,还必须在
    addDay
    中释放上一个
    dateForView
    值,否则应用程序将泄漏内存。如果您决定这样做,还必须在
    addDay
    中释放上一个
    dateForView
    值,否则应用程序将泄漏内存。self.dateForView=nil?或者Dealoc中的[dateforView release],否?任何一个都可以;当我有一个与实例变量对应的属性时,我通常使用
    self.dateForView=nil
    。如果可以避免,就不应该在dealoc中使用属性。如果存在一个显式声明的实例变量,请释放该实例变量。self.dateForView=nil?或者Dealoc中的[dateforView release],否?任何一个都可以;当我有一个与实例变量对应的属性时,我通常使用
    self.dateForView=nil
    。如果可以避免,就不应该在dealoc中使用属性。如果有显式声明的实例变量,请释放该实例变量。@blackguardian执行一次代码,因为我没有遇到任何崩溃我还有一件事你在视图控制器的其他地方使用dateForView。@blackguardian执行一次代码,因为我没有遇到任何崩溃我还有一件事你在视图控制器的其他地方使用dateForView吗您的视图控制器。考虑与您的问题无关的一个问题。简单地将86400秒添加到一个日期可能不是添加一天的正确答案,因为它不适合DST更改。您可能应该使用NSDateComponents我知道nsdatecomponent,但是在我无法与nsdate进行比较之后,您是否阅读了我提供的链接?创建表示一天的NSDATE组件,然后使用
    NSCalendar
    将其添加到
    dateForView
    <代码> DeaFoVIEW 仍然是<代码> NDATE < /代码>。考虑与您的问题无关的一个问题。简单地将86400秒添加到一个日期可能不是添加一天的正确答案,因为它不适合DST更改。您可能应该使用NSDateComponents我知道nsdatecomponent,但是在我无法与nsdate进行比较之后,您是否阅读了我提供的链接?创建表示一天的NSDATE组件,然后使用
    NSCalendar
    将其添加到
    dateForView
    dateForView
    仍然是一个
    NSDate