NSMutableDictionary不写入文件

时间:2012-10-10 00:54:56

标签: objective-c ios nsmutabledictionary nskeyedarchiver writetofile

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

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”=< 62706c69 73743030 d4010203 0405082e 2f542474 6f705824 6f626a65 63747358 24766572 73696f6e   59246172 63686976 6572d106 0754726f 6f748001 ab090a1f 20212223   24252627 55246e75 6c6cda0b 0c0d0e0f 10111213 14151617 18191a1b   1c1d1e57 6170696e 616d655e 6c6f6361 6c546875 6d625061 74685961   70696175 74686f72 596c6f63 616c5061 74685861 70697469 746c6557   61706970 6174685c 61706974 68756d62 6e61696c 57617069 74797065   5624636c 6173735c 706f7374 5f636f6e 74656e74 80028009 80048000   80038007 80088005 800a8006 5444424d 53566768 6873766a 55676976   656e596d 6f6e6f6c 6f677565 55476c65 6e6e5f10 3f687474 703a2f2f   61727470 6c617961 73632e6f 72672f77 702d636f 6e74656e 742f7570   6c6f6164 732f6170 705f7570 6c6f6164 732f6768 6873766a 2e6d6f76   5f104268 7474703a 2f2f6172 74706c61 79617363 2e6f7267 2f77702d   636f6e74 656e742f 75706c6f 6164732f 6170705f 75706c6f 6164732f   7468756d 626e6169 6c2e6a70 675f1094 2f766172 2f6d6f62 696c652f   4170706c 69636174 696f6e73 2f443337 34313232 392d3536 44452d34   3931412d 42444436 2d424530 41463931 43413234 452f4c69 62726172   792f4361 63686573 2f415349 48545450 52657175 65737443 61636865   2f506572 6d616e65 6e745374 6f72652f 46303846 36343633 36454646   46363533 44363234 36354641 45324142 36433931 2e6a7067 d228292a   2d582463 6c617373 65735a24 636c6173 736e616d 65a22b2c 5c566964   656f4461 74614f62 6a584e53 4f626a65 63745c56 6964656f 44617461   4f626a12 000186a0 5f100f4e 534b6579 65644172 63686976 65720008   00110016 001f0028 00320035 003a003c 0048004e 0063006b 007a0084   008e0097 009f00ac 00b400bb 00c800ca 00cc00ce 00d000d2 00d400d6   00d800da 00dc00e1 00e800ee 00f800fe 01400185 021c0221 022a0235   02380245 024e025b 02600000 00000000 02010000 00000000 00300000   00000000 00000000 00000000 0272&gt ;; }                     数据:< 62706c69 73743030 d4010203 0405082e 2f542474 6f705824 6f626a65 63747358 24766572 73696f6e 59246172 63686976   6572d106 0754726f 6f748001 ab090a1f 20212223 24252627 55246e75   6c6cda0b 0c0d0e0f 10111213 14151617 18191a1b 1c1d1e57 6170696e   616d655e 6c6f6361 6c546875 6d625061 74685961 70696175 74686f72   596c6f63 616c5061 74685861 70697469 746c6557 61706970 6174685c   61706974 68756d62 6e61696c 57617069 74797065 5624636c 6173735c   706f7374 5f636f6e 74656e74 80028009 80048000 80038007 80088005   800a8006 5444424d 53566768 6873766a 55676976 656e596d 6f6e6f6c   6f677565 55476c65 6e6e5f10 3f687474 703a2f2f 61727470 6c617961   73632e6f 72672f77 702d636f 6e74656e 742f7570 6c6f6164 732f6170   705f7570 6c6f6164 732f6768 6873766a 2e6d6f76 5f104268 7474703a   2f2f6172 74706c61 79617363 2e6f7267 2f77702d 636f6e74 656e742f   75706c6f 6164732f 6170705f 75706c6f 6164732f 7468756d 626e6169   6c2e6a70 675f1094 2f766172 2f6d6f62 696c652f 4170706c 69636174   696f6e73 2f443337 34313232 392d3536 44452d34 3931412d 42444436   2d424530 41463931 43413234 452f4c69 62726172 792f4361 63686573   2f415349 48545450 52657175 65737443 61636865 2f506572 6d616e65   6e745374 6f72652f 46303846 36343633 36454646 46363533 44363234   36354641 45324142 36433931 2e6a7067 d228292a 2d582463 6c617373   65735a24 636c6173 736e616d 65a22b2c 5c566964 656f4461 74614f62   6a584e53 4f626a65 63745c56 6964656f 44617461 4f626a12 000186a0   5f100f4e 534b6579 65644172 63686976 65720008 00110016 001f0028   00320035 003a003c 0048004e 0063006b 007a0084 008e0097 009f00ac   00b400bb 00c800ca 00cc00ce 00d000d2 00d400d6 00d800da 00dc00e1   00e800ee 00f800fe 01400185 021c0221 022a0235 02380245 024e025b   02600000 00000000 02010000 00000000 00300000 00000000 00000000   00000000 0272> key类:__ NSCFString类   值:NSConcreteMutableData

所以键和值都是有效类型。我之前用空字典实际初始化了cacheFile,所以我知道我可以在那里写。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

这可能是您为写作创建的NSURL的问题。 self.cacheFilePath的价值是什么?如果这是一个普通的旧文件路径,那么您需要创建如下URL:

[NSURL fileURLWithPath:self.cacheFilePath];

如果self.cacheFilePath已经以file://。

启动,那么你所拥有的只会是有价值的

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

答案 1 :(得分:1)

我是第二个rmaddy的回答。

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

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