2011-08-30 81 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

不要使用+ URLWithString:除非你想建立整個「file:/// path/to/file」路徑。但爲什麼你會在+ fileURLWithPath時爲你做這件事。 – kperryua

+0

從[鏈接](http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Constants/Reference/reference.html)獲得了信息正確的方案几乎意味着你的網址被格式化。 – smitec

1

錯誤262在FoundationErrors.h中定義爲NSFileReadUnsupportedSchemeError。

我建議你使用NSLog()寫出你正在使用的兩個URL的文字值,並確保它們是file:// URL並且它們看起來完整。

+0

這兩個值都是完整的。 – Moshe

+0

它們是file:// URLs? –

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變量的值。

相關問題