Objective-C中如何避免使用NSDateComponents导致EXC_BAD_ACCESS错误?

2026-04-16 17:033阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计438个文字,预计阅读时间需要2分钟。

Objective-C中如何避免使用NSDateComponents导致EXC_BAD_ACCESS错误?

基本问题,我确信有一个简单的答案。我正在尝试获取照片的时间。当我尝试使用NSDateComponents搜索特定的日期元素(例如天)时,我收到一个EXC_BAD_ACCESS错误。首先,我的代码的相关部分如下:

基本问题,我确信有一个简单的答案.

我正在尝试获取照片的时间戳.当我尝试访问NSDateComponents以检索特定的日期元素(例如“天”)时,我收到一个EXC_BAD_ACCESS错误.

首先,我的代码的相关位:

// formattedDateString is a string representing the "DateTimeOriginal" EXIF property extracted from the image NSDate *takenAt = [[NSDate alloc] initWithString:formattedDateString]; NSLog(@"date: %@", takenAt); // prints= date: 2010-01-10 03:25:00 -0500 NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; NSLog(@"cal: %@", gregorian); // prints= cal: <__NSCFCalendar: 0x10020b570> NSUInteger unitFlags = (NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit); NSDateComponents *components = [gregorian components: unitFlags fromDate: takenAt ]; int days = [components hour]; NSLog(@"comp: %@", days); // thrown error= Program received signal: “EXC_BAD_ACCESS”

如果我注释掉最后一行:NSLog(@“comp:%@”,days);代码执行成功.

我已经尝试了一些变体,但最重要的是,每当我向组件发送消息以访问属性时,都会引发“EXC_BAD_ACCESS”错误.

Objective-C中如何避免使用NSDateComponents导致EXC_BAD_ACCESS错误?

我做的研究似乎表明,这通常是未初始化的指针或我尝试发布的对象的结果,而不是我要发布的.据我所知,这不是这里的情况.

我错过了什么?

在此先感谢您为我揭开这一点.这是我在Objective-C中的第一次探索之一.

NSDateComponents class reference.

您正在使用%@作为整数的格式说明符.你需要使用%d.

使用%@时,NSLog函数会将参数视为对象,并向其发送描述消息.真正发生的是,运行时尝试取消引用参数(整数)但由于它不是有效指针,因此会出现EXC_BAD_ACCESS异常.

本文共计438个文字,预计阅读时间需要2分钟。

Objective-C中如何避免使用NSDateComponents导致EXC_BAD_ACCESS错误?

基本问题,我确信有一个简单的答案。我正在尝试获取照片的时间。当我尝试使用NSDateComponents搜索特定的日期元素(例如天)时,我收到一个EXC_BAD_ACCESS错误。首先,我的代码的相关部分如下:

基本问题,我确信有一个简单的答案.

我正在尝试获取照片的时间戳.当我尝试访问NSDateComponents以检索特定的日期元素(例如“天”)时,我收到一个EXC_BAD_ACCESS错误.

首先,我的代码的相关位:

// formattedDateString is a string representing the "DateTimeOriginal" EXIF property extracted from the image NSDate *takenAt = [[NSDate alloc] initWithString:formattedDateString]; NSLog(@"date: %@", takenAt); // prints= date: 2010-01-10 03:25:00 -0500 NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; NSLog(@"cal: %@", gregorian); // prints= cal: <__NSCFCalendar: 0x10020b570> NSUInteger unitFlags = (NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit); NSDateComponents *components = [gregorian components: unitFlags fromDate: takenAt ]; int days = [components hour]; NSLog(@"comp: %@", days); // thrown error= Program received signal: “EXC_BAD_ACCESS”

如果我注释掉最后一行:NSLog(@“comp:%@”,days);代码执行成功.

我已经尝试了一些变体,但最重要的是,每当我向组件发送消息以访问属性时,都会引发“EXC_BAD_ACCESS”错误.

Objective-C中如何避免使用NSDateComponents导致EXC_BAD_ACCESS错误?

我做的研究似乎表明,这通常是未初始化的指针或我尝试发布的对象的结果,而不是我要发布的.据我所知,这不是这里的情况.

我错过了什么?

在此先感谢您为我揭开这一点.这是我在Objective-C中的第一次探索之一.

NSDateComponents class reference.

您正在使用%@作为整数的格式说明符.你需要使用%d.

使用%@时,NSLog函数会将参数视为对象,并向其发送描述消息.真正发生的是,运行时尝试取消引用参数(整数)但由于它不是有效指针,因此会出现EXC_BAD_ACCESS异常.