我在我的控制器接口中声明了两个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并且在其他操作中使用它时会丢失它的值,但字符串变量是否保持其值? 我想使用这个网址来保存对文件的更改,在我的项目中我会使用它。
答案 0 :(得分:0)
假设您没有使用ARC,问题在于您将不拥有的对象分配给实例变量。如果对象没有所有者,则可以随时取消分配。您应声明对象的所有权,最好使用访问器而不是直接设置变量本身。
答案 1 :(得分:0)
在您的示例代码中,url_projectURL是局部变量,而tempString和projectURL是实例变量。你不要在你的行动方法中使用projectURL。
在您的操作方法中将对url_projectURL的所有引用更改为projectURL以匹配您的声明。