2012-06-20 17 views
6

私は特定のFileWrapperを更新したいNSFileWrapperディレクトリを持っています。私はこれを行う最良の方法が何であるか疑問に思っていましたか?しかしNSFileWrappersの置き換え

[self.fileWrapper addRegularFileWithContents:photoData 
          preferredFilename:@"photo.data"]; 

、FileWraperがすでに存在している時はいつでも、私はそう見て、私のFileWrapperでの重複取得:私はこれを防ぐにはどうすればよい

"1__#[email protected]%!#__photo.data" = "<NSFileWrapper: 0x6bb0260>"; 
"2__#[email protected]%!#__photo.data" = "<NSFileWrapper: 0x6b89b80>"; 
"3__#[email protected]%!#__photo.data" = "<NSFileWrapper: 0x6ba1700>"; 
"4__#[email protected]%!#__photo.data" = "<NSFileWrapper: 0x6bc8480>"; 
"photo.data" = "<NSFileWrapper: 0x6bcfc50>"; 

を、私はこのコードを使用していたこれまでのところ

FileWrapper(この場合はphoto.data)を置き換えるだけです。 NSFileWrapper Class ReferenceでFileWrappersを置き換える方法が見つかりませんでした。

私はこれが解決策になるかもしれないと思う

答えて

5

NSFileWrapper *oldFileWrapper = [self.fileWrapper.fileWrappers objectForKey:fileName]; 
if (oldFileWrapper) [self.fileWrapper removeFileWrapper:oldFileWrapper]; 

[self.fileWrapper addRegularFileWithContents:[self encodeObject:object] 
          preferredFilename:fileName]; 
0

私はこの問題につまずいたと私は「リソース」「リソース」という名前の1という名前のフォルダを持っていたので、私にとってそれはでした。 Mac OS Xののファイルシステムでは大文字と小文字は区別されませんが、iOSにあるため、iCloudの問題が発生しました。

あなたのケースの根本的な問題は、大文字/小文字に関連する可能性があります。もちろん、ファイルラッパーを置き換えることでこれを修正しています。ファイルラッパーは、ファイルを効果的に削除して再作成します。これは小さなファイルにとっては容認できる解決策かもしれませんが、(ファイルが変更されなくても同期されるため)ディレクトリ内の大規模または多数のファイルに対して非常に非効率的になります。

+0

OS Xファイルシステムでは、大文字と小文字を区別するか、大文字と小文字を区別することができます...ユーザーのドライブフォーマット方法によって異なります。 –

+0

それは有効な点です。私はデフォルトフォーマット(Macを購入したときのように)を「Mac OS拡張(ジャーナリング)」と仮定しています。 – auco