【问题标题】:Objective C EXC_BAD_ACCESS (code=1, address=0x1)目标 C EXC_BAD_ACCESS(代码=1,地址=0x1)
【发布时间】:2015-02-09 04:28:27
【问题描述】:

我是目标 c 的新手,

我正在考虑两个日期并获取其间的天数:

NSString *start = @"2010-12-01";
NSString *end = @"2010-12-02";

NSDateFormatter *f = [[NSDateFormatter alloc] init];
[f setDateFormat:@"yyyy-MM-dd"];
NSDate *startDate = [f dateFromString:start];
NSDate *endDate = [f dateFromString:end];

NSDateComponents *components;
NSInteger days;

components = [[NSCalendar currentCalendar] components: NSDayCalendarUnit
fromDate: startDate toDate: endDate options: 0];

days = [components day];

当我尝试为 cell.textLable.text = days 分配天数时,但收到以下错误消息:

Thread 1: EXC_BAD_ACCESS(code=1, address=0x1)

单元格是这个SGridAutoMultiLineCell *cell; 错误是什么意思,我该如何解决。返回的数字是 1。

【问题讨论】:

  • 我不明白那里的答案,我应该尝试 cell.textLabel.text = NSLog(@"%ld", days) 吗?
  • 可能更像cell.textLabel.text = [NSString stringWithFormat:@"%d", days];
  • 我建议你看看Good resources for learning ObjC。 Big Nerd Ranch 的书籍非常棒,很多人喜欢 iTunes U 上的斯坦福 iOS 课程。

标签: objective-c


【解决方案1】:

试试:

cell.textLabel.text = [NSString stringWithFormat:@"%d", days];

您当前的代码 (cell.textLable.text = days;) 正在将一个整数传递给一个需要 NSString 指针的字段。当组件尝试将该值 (1) 作为指针取消引用时,会发生崩溃,因为 1 当前不是有效的内存位置。

上面的代码将构造一个包含days 值的NSString

【讨论】:

    【解决方案2】:

    您将一个整数值(1,12 月 1 日到 2 日之间的天数)分配给需要 NSString 实例的标签。这就是为什么错误消息说地址是 0x1 - 它将整数值 1 视为内存中对象的地址。正如 cmets 中所指出的,有必要首先将整数转换为字符串。最简单的方法是使用-stringWithFormat:,但您可能希望执行特定于区域设置的格式化。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-21
      • 1970-01-01
      • 2015-03-11
      • 1970-01-01
      • 2018-03-13
      • 2013-10-11
      • 2019-07-11
      相关资源
      最近更新 更多