2010-05-29 2 views
2

У меня есть две строки кода в функции applicationDidFinishLaunching:цель с NSURL не может ответить + initFileURLWithPath

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

и я получаю предупреждение (название) во второй строке ...

Я понятия не имею, что я делаю неправильно. Это абсурдно простое приложение ... Я читал другие сообщения о методах переупорядочения, но я использую классы, предоставленные NS, ничто из моего.

Любой совет будет очень благодарен.

Спасибо.

ответ

2

Предупреждение является нормальным, так как метод initFileURLWithPath является методом экземпляра, а не методом класса. Правильный способ использовать это:

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

Вы должны allocNSURL первым.

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

Если метод начинается с «init», это означает, что он должен быть вызван на выделенный экземпляр, а не на сам класс.

5

initFileURLWithPath: - метод экземпляра, а не метод класса, поэтому сначала необходимо создать экземпляр класса с alloc. Итак:

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

Если вы хотите использовать удобный метод, используйте fileURLWithPath:, так:

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

Я думаю, что проблема заключается в NSURL должен сначала создать с помощью Alloc. Просто объявить, что это не сработает.

Также, я думаю, вам нужно будет освободить его позже, иначе будет потенциальная утечка.

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

// сделать некоторые вещи

[targetFileURL release ]; 
Смежные вопросы