【问题标题】:NSCalendar crashing appNSCalendar 崩溃的应用程序
【发布时间】:2010-09-22 09:57:10
【问题描述】:

我在 viewDidLoad 中初始化一个 NSCalendar,如下所示:

gregorian = [NSCalendar currentCalendar];

日历在相应的 .h 文件中声明如下:

NSCalendar *gregorian;

从我的应用程序崩溃的方法访问日历时:

- (void)someMethod{
  unsigned int unitFlags;
  unitFlags = NSHourCalendarUnit | NSMinuteCalendarUnit;
  [gregorian 
    components:unitFlags 
    fromDate:[NSDate date] 
    toDate:[NSDate date] 
    options:0];
}

这似乎与崩溃日志相关:

异常类型:EXC_BAD_ACCESS (SIGBUS)
异常代码:0x0000000000000015 处的 KERN_PROTECTION_FAILURE
崩溃的线程:0 调度队列:com.apple.main-thread

应用特定信息:
objc_msgSend() 选择器名称:components:fromDate:toDate:options:
iPhone 模拟器 225,iPhone OS 3.2 (iPad/7W367a)

有什么想法吗?

谢谢

【问题讨论】:

    标签: objective-c cocoa nscalendar


    【解决方案1】:

    将日历分配给“gregorian”时,您没有保留日历,因此在您访问它时它已经消失了。

    【讨论】:

    • 感谢您的回答。我仍然想知道为什么我可以用 UIView 做同样的事情并且它可以工作(不保留)?
    • 如果你没有保留一个自动释放的对象,你打算作为一个实例变量保留,那么你做错了。我们需要查看似乎可以回答这个问题的代码。然而,一般来说,内存管理错误可能会表现得很奇怪(即,它们并不总是立即或可靠地崩溃)。但是,在您发布的代码中,您没有保留日历对象,然后尝试稍后访问它,这是一个错误。
    • DeepSeaFish:我曾经遇到过 Cocoa 中的 Bindings 问题,我使用自动释放构造函数 (arrayWith…:) 创建控制器拥有的数组,但未能保留它。因此,这个阵列是该死的——它没有净保留。然后我装了一个笔尖。我在绑定到暴露数组的属性的 nib 中有一个视图。当视图被取消归档时,它的绑定保留了数组并将其从死亡中拯救出来。有时你不能依赖出现的错误,但它仍然是错误。
    猜你喜欢
    • 1970-01-01
    • 2011-03-31
    • 1970-01-01
    • 1970-01-01
    • 2012-12-11
    • 2012-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多