【问题标题】:Get EXEC_BAD_ACCESS when I get the NSFileModificationDate当我得到 NSFileModificationDate 时得到 EXEC_BAD_ACCESS
【发布时间】:2011-01-31 06:19:19
【问题描述】:

我尝试获取文件的最后修改日期:

NSFileManager *fm = [[NSFileManager alloc] init];
NSError *err;
NSDate *lastModif = [[fm attributesOfItemAtPath:filename error:&err] objectForKey:NSFileModificationDate];//filename is ok ;-)
if(err == nil) {
    [lastModif retain];
    //I can put a NSLog of lastModif here, it works !!
    NSTimeInterval lastModifDiff = [lastModif timeIntervalSinceNow];//crash here
}

我不明白为什么 NSDate 似乎被释放了,为什么保留不保留它。

如果您有任何想法,谢谢...

【问题讨论】:

    标签: iphone objective-c nsdate nstimeinterval


    【解决方案1】:

    您不需要保留lastModif。我认为您可能会尝试将lastModifDiff 视为某种对象,当您对它执行 NSLog 或之后对它执行任何操作时。 NSTimeInterval 是 double 的 typedef,因此您需要将其视为 double 或 [NSNumber numberWithDouble:lastModifDiff] 如果您想像对象一样使用它。

    【讨论】:

    • 我暂时没有对 lastModifDiff 做任何事情,它在分配时崩溃,因为根据调试器,lastModif 似乎为零。
    • 我现在正在运行您的代码。在设置 lastModifDiff 后,我取出了不必要的释放并添加了一个 NSLog()。这两个值都是为我设置的。你确定你的文件名正确吗?
    • 是的,我可以用 NSKeyedUnarchiver 加载它,并且 [fm fileExistsAtPath:filename] 是 YES。
    • 用调试器运行代码,当它崩溃时,在控制台中输入“where”,也许这会帮助我们弄清楚发生了什么。我将您的代码复制并粘贴到一个新的 Xcode 项目中,为磁盘上的某些内容放入文件路径,并且我没有崩溃。也可以尝试一个干净的构建。
    • 非常感谢,我不太明白为什么,但现在可以了。
    【解决方案2】:

    我也遇到了同样的问题,但这篇文章似乎很贴切:

    NSDate : timeIntervalSinceNow crash

    我正在编写一组简单的函数 - startClock/endClock - 使用 NSDate 来确定我的游戏循环中的 FPS。除了 timeIntervalSinceNow 崩溃,声称我之前设置的 NSDate 对象不存在。

    我知道当我调用 startClock 时 NSDate 对象的保留计数为 1,但我的理论是 NSDate 实例在内部被操纵为在它们感到无聊并且感觉无用时自动释放。

    使用保留/释放来承担这些轻浮和短暂的 NSDate 对象的所有权对我有用。

    【讨论】:

      猜你喜欢
      • 2021-04-11
      • 1970-01-01
      • 2022-10-04
      • 1970-01-01
      • 2013-02-06
      • 1970-01-01
      • 1970-01-01
      • 2018-11-01
      • 2017-03-15
      相关资源
      最近更新 更多