【问题标题】:Save nsdate to disk将 nsdate 保存到磁盘
【发布时间】:2011-04-29 21:24:00
【问题描述】:

我查看了NSDatetimeIntervalSinceReferenceDate 函数。我可以使用此函数将间隔存储到磁盘,然后将其返回到NSDate,并与原始值相同吗?我担心参考或间隔可能因机器而异,并且在另一台计算机上出现不同?

【问题讨论】:

    标签: cocoa nsdate nscalendar


    【解决方案1】:

    NSDate 可以归档为 NSData 实例,并且可以轻松地将 NSData 写入磁盘/从磁盘读取。

    // Create and store it
    NSDate * date = [NSDate date];
    NSData * dateData = [NSKeyedArchiver archivedDataWithRootObject:date];
    [dateData writeToFile:@"/Some/path/to/file.dat" atomically:NO];
    
    // Now bring it back
    NSData * restoredDateData = [NSData dataWithContentsOfFile:@"/Some/path/to/file.dat"];
    NSDate * restoredDate = [NSKeyedUnarchiver unarchiveObjectWithData:restoredDateData];
    

    没有进行错误检查。做得比那更好。 ;-)

    【讨论】:

    • NSKeyedArchiver 也可以在没有 NSData 的情况下直接写入文件。
    • +archiveRootObject:toFile: - true.
    • 不起作用,它说:-[NSKeyedUnarchiver initForReadingWithData:]: data is NULL
    • 那你交给它的 NSData 实例有什么问题呢?
    • 非常感谢!你救了我!我正在编写一个应用程序,但我一生都无法弄清楚为什么我的 NSDate 没有加载! =) 再次,非常感谢你! =)
    【解决方案2】:

    或者,如果您想存储 timeIntervalSinceReferenceDate 的结果,您可以将其作为双精度值存储在 NSNumber 中,然后使用 Joshua 的 NSKeyedArchiver 方法将其保存到磁盘。

    【讨论】:

    • 或者你可以只写双精度的 8 个字节而不用归档。
    猜你喜欢
    • 2012-11-02
    • 1970-01-01
    • 1970-01-01
    • 2013-01-17
    • 2011-04-14
    • 1970-01-01
    • 2016-07-22
    • 2013-12-19
    • 2010-09-23
    相关资源
    最近更新 更多