【问题标题】:NSMutableDictionary not writing to fileNSMutableDictionary 不写入文件
【发布时间】:2012-10-10 00:54:55
【问题描述】:

据我所知,我有一段代码应该可以正常工作,但不是:

NSMutableDictionary* videos = [NSMutableDictionary dictionary];
VideoObject* localVideo = [VideoObject videoObject];
localVideo.assetURL = url;//trust me it's set
localVideo.localThumbPath = finalPath;
        videoData = [NSKeyedArchiver archivedDataWithRootObject:localVideo];
        [videos setObject:videoData forKey:localVideo.assetURL];
        if(![videos writeToURL:[NSURL URLWithString:self.cacheFilePath] atomically:YES]){
            NSLog(@"pretest videos:%@\
                  data:%@\
                  class of key:%@ class of value:%@",videos,videoData,NSStringFromClass([localVideo.assetURL class]),NSStringFromClass([videos[localVideo.assetURL] class]));
        }

我已经在 VideoObject 类中设置了所有编码内容。 lovalVideo.assetURL 是类型 NSString。一切看起来对我来说都应该完美无缺,但它总是在 writeToURL 上返回 NO。这是我从日志中得到的输出:

预测试视频:{ “http://example.org/test.mov”=; } 数据: key 类:__NSCFString 类 值:NSConcreteMutableData

所以 key 和 value 都是有效的类型。实际上,我之前已经用一个空字典初始化了那个 cacheFile,所以我知道我可以在那里写。

有什么想法吗?

【问题讨论】:

    标签: objective-c ios nsmutabledictionary nskeyedarchiver writetofile


    【解决方案1】:

    这可能是您为编写而创建的 NSURL 的问题。 self.cacheFilePath 的值是多少?如果这是一个普通的旧文件路径,那么您需要像这样创建 URL:

    [NSURL fileURLWithPath:self.cacheFilePath];
    

    只有当 self.cacheFilePath 已经以 file:// 开头时,你所拥有的才是有价值的。

    在任何一种情况下,请确保 self.cacheFilePath 代表绝对文件路径。

    【讨论】:

    • 你知道我感觉缺少“file://”是问题所在。你死定了!谢谢!^^
    【解决方案2】:

    我赞同 rmaddy 的回答。

    查看 URLWithString 的文档,他们建议:要为文件系统路径创建 NSURL 对象,请改用 fileURLWithPath:isDirectory:。

    如果字符串格式错误,返回值也将为 nil。所以你应该检查/记录来自 [NSURL URLWithString:self.cacheFilePath] 的返回值。如果它为零,那是你的问题。可能使用 fileURLWithPath:isDirectory: 会使问题消失。

    【讨论】:

      猜你喜欢
      • 2012-02-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-05
      • 1970-01-01
      • 2016-05-02
      • 2020-09-29
      • 2016-11-03
      • 2014-08-15
      相关资源
      最近更新 更多