NSdate 的问题

Trouble with NSdate

提问人:tombuarts 提问时间:5/10/2011 最后编辑:sarnoldtombuarts 更新时间:5/10/2011 访问量:235

问:

我正在编写一个具有多个视图的程序。我想在视图之间传递一个日期变量。我使用 .我在其中一个视图上声明了变量。然后我设置了.然后,我使用以下代码将天数添加到日期;extern NSDate *chooseDateNSDate *datedate = chooseDate

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

问题似乎是没有被识别为 .代码在 时崩溃。我不知为什么会这样。我希望我已经解释清楚了。有什么想法吗?chooseDateNSDatedate = [calendar ...]

目标-C

评论

0赞 FreeAsInBeer 5/10/2011
你能出示你的财产的代码吗(?date
0赞 tombuarts 5/10/2011
date = 选择日期;NSDateComponents *组件 = [[NSDateComponents 分配] 初始化];[组件 setDay:(int)daycount];日期 = [日历 dateByAddingComponents:组件到日期:日期选项:0];dateComponents = [日历组件:unitFlags fromDate:date];year = [日期组件年份];month = [日期组件 month];day = [日期组件日];小时 = [dateComponents 小时];min = [日期组件分钟];NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease];[格式化程序 setDateStyle:NSDateFormatterLongStyle];[showDate setText:[格式化程序 stringFromDate: date]];
0赞 tombuarts 5/10/2011
对不起格式。我不记得如何使它看起来像目标 c 中的代码。
0赞 FreeAsInBeer 5/10/2011
我没有看到任何地方的定义。你在哪里定义了它,你是否赋予了它一个价值?calendar
0赞 tombuarts 5/10/2011
是的,日历是以相同的方法声明的。这是代码;calendar= [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];NSCalendarUnit unitFlags = NSYearCalendarUnit |NSMonthCalendarUnit |NSDayCalendarUnit |NSHourCalendarUnit |NSMinuteCalendarUnit |NSSecondCalendarUnit;

答:

0赞 FreeAsInBeer 5/10/2011 #1

您正在设置实例。当您尝试使用它时,您确定它存在吗?你可能需要它。chooseDateautoreleasedretain

评论

0赞 tombuarts 5/10/2011
我检查了。当我设置“date = chooseDate”时,它肯定存在。当我删除代码行“date = [calendar..]”时,程序运行良好。
0赞 Rad'Val 5/10/2011 #2

如果您更改为 .如果是这样,其余的应该几乎是不言自明的。chooseDate = [datePicker date];chooseDate = [[datePicker date] copy];

评论

0赞 tombuarts 5/17/2011
对不起,回复晚了,我已经离开这里一段时间了。按照您所说的使用“复制”解决了问题,非常感谢。在我过去使用过的所有不同类型的编码中,将一个变量设置为等于另一个变量总是会导致变量的精确副本(即 choosedate = date,当两者都定义为 NSDate 时)。这只是复制日期的问题,还是在将一个变量设置为等于另一个变量时应始终使用“copy”?
0赞 Rad'Val 5/17/2011
问题是,返回一个 autorelease 对象,这意味着当调用它的方法闭包结束时,该对象被释放。当您尝试在日期指针指向 null 或内存地址分配给其他对象时调用它时,因此您得到的错误并不总是简单的崩溃,有时您也会在堆栈中收到一些奇怪的消息。至于它的作用是确保即使原始对象被释放,您仍然拥有副本并可以使用它。[datePicker date]date = [calendar dateByAddingComponents:components toDate:date options:0];copy
0赞 tombuarts 5/18/2011
谢谢,这个解释很有帮助。我在堆栈中收到了奇怪的消息,我不知道该如何看待它们。
0赞 Rad'Val 5/18/2011
如果是这样,请考虑选择我的答案,它可以帮助其他有类似问题的其他人,并帮助我炫耀我的声誉:)