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 クラスですべてのエンコーディングをセットアップしました。lovelVideo.assetURL は NSString 型です。すべてが完全に機能するように見えますが、writeToURL では常に NO が返されます。ログから取得した出力は次のとおりです。

00300000 00000000 00000000 00000000 0272>; データ:<

したがって、キーと値の両方が有効な型です。私は実際にその cacheFile を空の辞書で初期化しているので、そこに書き込むことができます。

何か案は?

4

2 に答える 2

1

私は2番目のrmaddyの答えです。

URLWithString のドキュメントを見ると、次のように提案されています。 ファイル システム パスの NSURL オブジェクトを作成するには、代わりに fileURLWithPath:isDirectory: を使用してください。

文字列の形式が正しくない場合も、戻り値は nil になります。したがって、[NSURL URLWithString:self.cacheFilePath] からの戻り値を確認/ログに記録する必要があります。それが nil なら、それはあなたの問題です。おそらく fileURLWithPath:isDirectory: を使用すると、問題が解消されます。

于 2012-10-10T02:45:07.380 に答える
1

おそらく、書き込み用に作成した NSURL に問題があります。self.cacheFilePath の値は何ですか? これが単純な古いファイル パスである場合は、次のような URL を作成する必要があります。

[NSURL fileURLWithPath:self.cacheFilePath];

self.cacheFilePath がすでに file:// で始まっている場合にのみ価値があります。

いずれの場合も、self.cacheFilePath が絶対ファイル パスを表していることを確認してください。

于 2012-10-10T01:57:07.030 に答える