NSURL返回零?

时间:2012-01-09 23:39:08

标签: objective-c cocoa nsurl null

我在我的控制器接口中声明了两个NSString和NSURL变量

// project file url
NSURL * url_projectURL;

// temp string just for examine
NSString * tempString;

在我的app动作中名为:

- (IBAction) btnNewProject:(id)sender

// after running save panel and clicked Save
// 
// set project url
url_projectURL = [savePanel URL];
// set temp string
tempString = [url_projectURL absoluteString];
//
NSLog(@"tempString is: %@", tempString);
NSLog(@"ProjectURL is: %@", [url_projectURL absoluteString]);

结果是:

tempString is: file://localhost/Users/kosartofiq/Documents/project.ksf
ProjectURL is: file://localhost/Users/kosartofiq/Documents/project.ksf

但在其他行动中例如:      - (IBAction)btn_test:(NSButton *)发件人

NSLog(@"tempString is: %@", tempString);
NSLog(@"ProjectURL is: %@", [url_projectURL absoluteString]);

结果: 对于字符串变量是:

tempString is: file://localhost/Users/kosartofiq/Documents/project.ksf

但是对于url变量是nil或在coe

的运行中显示错误

我的问题是为什么url变量将其值更改为nil并且在其他操作中使用它时会丢失它的值,但字符串变量是否保持其值? 我想使用这个网址来保存对文件的更改,在我的项目中我会使用它。

2 个答案:

答案 0 :(得分:0)

假设您没有使用ARC,问题在于您将不拥有的对象分配给实例变量。如果对象没有所有者,则可以随时取消分配。您应声明对象的所有权,最好使用访问器而不是直接设置变量本身。

答案 1 :(得分:0)

在您的示例代码中,url_projectURL是局部变量,而tempString和projectURL是实例变量。你不要在你的行动方法中使用projectURL。

在您的操作方法中将对url_projectURL的所有引用更改为projectURL以匹配您的声明。