2010-05-29 47 views
2

我在的applicationDidFinishLaunching功能的两行代码:目标C 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必须首先创建使用页头。 只是宣布它不会工作。

另外我想你会需要稍后发布它,否则会有潜在的泄漏。

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

//做一些东西

[targetFileURL release ];