Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.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
Objective c NSdate的问题_Objective C - Fatal编程技术网

Objective c NSdate的问题

Objective c NSdate的问题,objective-c,Objective C,我正在写一个有多个视图的程序。我想在视图之间传递一个日期变量。我使用extern NSDate*choostate创建了一个全局变量。我在其中一个视图上声明变量NSDate*date。然后我设置date=choostate。然后,我使用以下代码添加日期 NSDateComponents *components = [[NSDateComponents alloc] init]; [components setDay:(int)daycount]; date = [calendar dateByA

我正在写一个有多个视图的程序。我想在视图之间传递一个日期变量。我使用extern NSDate*choostate创建了一个全局变量。我在其中一个视图上声明变量NSDate*date。然后我设置date=choostate。然后,我使用以下代码添加日期

NSDateComponents *components = [[NSDateComponents alloc] init];
[components setDay:(int)daycount];
date = [calendar dateByAddingComponents:components toDate:date options:0];

问题似乎是Choostate没有被确认为NSDate。代码在日期=[calendar…]时崩溃。我不知道为什么会发生这种情况。我希望我已经解释清楚了。有什么想法吗

您正在将Choostate设置为自动删除的实例。当您尝试使用它时,您确定它存在吗?您可能需要保留它。

如果您更改Choostate=[datePicker date];选择日期=[[datePicker date]copy];。如果是这样的话,其余的应该是不言自明的。

我检查过了。当我设置date=choostate时,它肯定存在。当我快速删除代码行date=[calendar..]时,程序运行正常。你能显示你的财产日期代码吗?date=Choostate;NSDateComponents*components=[[NSDateComponents alloc]init];[组件设置日:intdaycount];日期=[calendar dateByAddingComponents:components toDate:date选项:0];dateComponents=[日历组件:unitFlags fromDate:date];年份=[dateComponents year];月=[dateComponents-month];day=[dateComponents day];小时=[dateComponents小时];分钟=[dateComponents minute];NSDateFormatter*格式化程序=[[[NSDateFormatter alloc]init]autorelease];[格式化程序setDateStyle:NSDateFormatterLongStyle];[showDate setText:[formatter stringFromDate:date]];对不起,格式不对。我不记得如何使它看起来像objective c中的代码。我在任何地方都没有看到日历的定义。你在哪里定义了它,你给了它一个值吗?是的,日历是用同样的方法在上面声明的。这是代码;日历=[[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar];nsCalendarUnitFlags=NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | nsourCalendarUnit | NSMinuteCalendarUnit | nsSecond CalendarUnit;很抱歉反应太晚,我已经离开这里一段时间了。使用你所说的复制修复了这个问题,非常感谢。在我过去使用的所有不同类型的编码中,将一个变量设置为另一个变量总是导致变量的精确副本,即choostate=date,当两者都定义为NSDate时。这只是复制日期的问题,还是在将一个变量设置为另一个变量时应该始终使用copy?问题是,[datePicker date]返回一个autorelease对象,这意味着当调用它的方法闭包结束时,对象被释放。当您尝试在date=[calendar dateByAddingComponents:components toDate:date选项:0]中调用它时;日期指针指向null或内存地址被分配给了不同的对象,因此您得到的错误并不总是简单的崩溃,有时您也会在堆栈中得到一些奇怪的消息。至于复制,它所做的是确保即使原始对象被释放,您仍然拥有该副本并可以使用它。谢谢,这个解释很有帮助。我在书堆里收到了奇怪的信息,我不知道该怎么做。如果是这样的话,请考虑选择我的答案,它帮助其他有类似问题的人,帮助我炫耀自己的名声: