2010-05-29 5 views
2

J'ai deux lignes de code dans la fonction applicationDidFinishLaunching:c NSURL peut ne pas répondre à + initFileURLWithPath

NSString *targetFilePath = @"/Users/bob/Documents/About_Stacks.pdf"; 
NSURL *targetFileURL = [NSURL initFileURLWithPath:targetFilePath]; 

et je reçois l'avertissement (titre) dans la deuxième ligne ...

Je n'ai aucune idée de ce que je fais de mal. C'est une application absurdement simple ... J'ai lu d'autres articles sur les méthodes de réordonnancement, mais j'utilise des classes fournies par NS, rien de mon propre.

Un conseil serait grandement apprécié.

Merci.

Répondre

2

L'avertissement est normal car la méthode initFileURLWithPath est une méthode d'instance et non une méthode de classe. La bonne façon de l'utiliser est:

NSString *targetFilePath = @"/Users/bob/Documents/About_Stacks.pdf"; 
NSURL *targetFileURL = [[NSURL alloc] initFileURLWithPath:targetFilePath]; 
3

Vous devez alloc un NSURL premier. Si la méthode commence par "init", cela signifie qu'elle doit être appelée sur une instance allouée, et non sur la classe elle-même.

5

initFileURLWithPath: est une méthode d'instance, pas une méthode de classe, donc vous devez d'abord créer une instance de la classe avec alloc. Alors:

NSString* targetFilePath = @"/Users/bob/Documents/About_Stacks.pdf"; 
NSURL* targetFileURL = [[NSURL alloc] initFileURLWithPath:targetFilePath]; 

Si vous souhaitez utiliser la méthode de commodité, utiliser fileURLWithPath:, donc:

NSURL* targetFileURL = [NSURL fileURLWithPath:targetFilePath]; 
1

Je pense que le problème est le NSURL doit créer la première utilisation alloc. Juste déclarer que cela ne fonctionnera pas.

Aussi je pense que vous aurez besoin de le libérer plus tard, sinon il y aura une fuite potentielle.

NSURL *targetFileURL = [[NSURL alloc] initFileURLWithPath:targetFilePath]; 

// faire des choses

[targetFileURL release ]; 
Questions connexes