1

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

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。这是我从他的日志中得到的输出:

00300000 00000000 00000000 00000000 0272>; } 数据:<

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

有任何想法吗?

4

2 回答 2

1

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

[NSURL fileURLWithPath:self.cacheFilePath];

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

无论哪种情况,请确保 self.cacheFilePath 代表绝对文件路径。

于 2012-10-10T01:57:07.030 回答
1

我第二个rmaddy的回答。

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

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

于 2012-10-10T02:45:07.380 回答