2011-08-30 4 views
10

J'essaie de copier un fichier de mon ensemble d'applications dans le répertoire de documents de mon application. Je reçois une erreur, "Cocoa Error 262". Qu'est-ce que je fais mal? Voici mon code:Quel est le problème avec ma copie ici?

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]); 
} 

Répondre

32

Le problème est que vous initialisez une URL avec un ancien chemin de fichier simple.

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

Utilisez à la place [NSURL fileURLWithPath:].

3

L'erreur que vous obtenez est

NSFileReadUnsupportedSchemeError Read error because the specified URL scheme is unsupported

que je crois signifierait un de vos chemins ne forme pas correctement. écrivez peut-être ces chemins dans le journal et voyez s'ils sortent comme vous le souhaitez.

+0

Quel est le schéma correct, et d'où avez-vous obtenu cette information? – Moshe

+0

N'utilisez pas + URLWithString: à moins que vous ne vouliez créer l'intégralité du chemin "file: /// path/to/file". Mais pourquoi voudriez-vous quand + fileURLWithPath: fait cela pour vous. – kperryua

+0

a obtenu l'info de [link] (http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Constants/Reference/reference.html) schéma correct signifie beaucoup comment votre URL est formaté. – smitec

1

L'erreur 262 est définie dans FoundationErrors.h comme étant NSFileReadUnsupportedSchemeError.

Je vous suggère d'utiliser NSLog() pour écrire les valeurs littérales des deux URL que vous utilisez et assurez-vous qu'elles sont des URL file: // et qu'elles semblent complètes.

+0

Les deux valeurs sont complètes. – Moshe

+0

Et ce sont des fichiers: // URLs? –

2

J'ai résolu le problème, bien que pour être honnête, je ne suis pas sûr de ce que c'était. Je dois aller sur le code fonctionne à nouveau, mais voici:

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); 
    } 
} 

Edit:

Je soupçonne que le chemin vers le répertoire de l'application est incorrecte, étant donné que le corps du produit applicationDocumentsDirectory semble différent de la méthode utilisée pour la valeur de la variable documentsDorectory montrée ci-dessus.

Questions connexes