2011-08-30 14 views
10

私はアプリケーションバンドルからアプリケーションのドキュメントディレクトリにファイルをコピーしようとしています。 「Cocoa Error 262」というエラーが表示されます。私は間違って何をしていますか?ここに私のコードだ:私のコピーは何が問題なのですか?

NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"CoreData.sqlite"]; 
NSURL *initialURL = [NSURL URLWithString:[[NSBundle mainBundle] pathForResource:@"CoreData" ofType:@"sqlite"]]; 

NSError *error = nil; 

if (![[NSFileManager defaultManager] fileExistsAtPath:[initialURL absoluteString]]) { 
    NSLog(@"Original does not exist. \nPath: %@", [initialURL absoluteString]); 
} 

if (![[NSFileManager defaultManager] fileExistsAtPath:[storeURL absoluteString]]) { 
    NSLog(@"Destination file does not exist. \nPath: %@", [storeURL absoluteString]); 

    [[NSFileManager defaultManager] copyItemAtURL:initialURL toURL:storeURL error:&error]; 

    NSLog(@"Error: %@", [error description]); 
} 

答えて

32

普通の古いファイルパスでURLを初期化しようとしています。

NSURL *initialURL = 
    [NSURL URLWithString:[[NSBundle mainBundle] pathForResource:@"CoreData" 
                 ofType:@"sqlite"]]; 

代わりに[NSURL fileURLWithPath:]を使用してください。

3

あなたが取得しているエラーは、私はあなたのいずれかのパスが正しく形成されていない意味するだろうと信じて

NSFileReadUnsupportedSchemeError Read error because the specified URL scheme is unsupported

です。これらのパスをログに書き込んで、期待通りにそれらが出ているかどうかを確認してください。

+0

正しいスキームは何ですか?この情報はどこから取得しましたか? – Moshe

+0

"file:/// path/to/file"のパス全体を構築しない場合は、+ URLWithStringを使用しないでください。しかし、なぜあなたは+ fileURLWithPath:あなたのためにそれをしますか? – kperryua

+0

[link](http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Constants/Reference/reference.html)からの情報を得ました正しいスキームはあなたのURLフォーマットされています。 – smitec

1

エラー262は、FoundationErrors.hでNSFileReadUnsupportedSchemeErrorと定義されています。

NSLog()を使用して、使用している2つのURLのリテラル値を書き出し、それらがfile:// URLであること、およびそれらが完全に見えることを確認することをお勧めします。

+0

両方の値が完成しました。 – Moshe

+0

これはfile://のURLですか? –

2

私はこの問題を解決しましたが、正直言って私はそれが何であるか分かりません。私は再び作業コードの上に行かなければならないが、ここでは、次のとおりです。

NSError *error = nil; 


NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.%@", @"CoreData", @"sqlite"]]; 

//if file does not exist in document directory, gets original from mainbundle and copies it to documents. 

if (![[NSFileManager defaultManager] fileExistsAtPath:filePath]) { 
    NSString *defaultFilePath = [[NSBundle mainBundle] pathForResource:@"CoreData" ofType:@"sqlite"]; 
    [[NSFileManager defaultManager] copyItemAtPath:defaultFilePath toPath:filePath error:&error]; 

    if (error != nil) { 
     NSLog(@"Error: %@", error); 
    } 
} 

を編集:

私は、生成されたapplicationDocumentsDirectoryの体ことを考えると、アプリケーションディレクトリへのパスが間違っていたと思われます上記のdocumentsDorectory変数の値とは異なる方法で表示されます。

関連する問題