【问题标题】:Something wrong with my variable [closed]我的变量有问题[关闭]
【发布时间】:2013-03-26 11:29:52
【问题描述】:

我创建了一个 getter 来获取变量的内容,但它不起作用。

代码如下:

-(void)documentURLReceived:(NSURL *)url{

    _getUrl = [[NSURL alloc] init];
    _getUrl = url;
    NSLog(@"Result: %@", _getUrl);
}
-(void)getUrl{
    NSLog(@"getUrl: %@", _getUrl);
}

这里是控制台中的结果:

结果:http://www.google.com

getUrl : (null)

我不明白为什么!

这是我的财产:

@property (strong, nonatomic) NSURL *getUrl;

感谢您的帮助:)

【问题讨论】:

  • 你在哪里调用 [self getUrl];方法?
  • 查看苹果文档以了解命名约定和内存管理。两者都很重要。
  • 我正在使用 ARC。我在另一个视图控制器中调用此方法: MyViewController *main = [[MyViewController alloc] init]; [主getUrl];
  • 等待答案......
  • 在这种情况下 - 在覆盖编译器创建的自动合成的 getter/setter 时去掉 getURL 方法。此外,您的方法 getURL 是一个不返回任何内容的 void 方法。

标签: iphone ios variables return return-value


【解决方案1】:

如果您使用 ARC 和最新的 Xcode - 摆脱 getURL 方法 - 除非您需要执行自定义逻辑,否则不应覆盖此方法,此外,您的 getURL 方法不返回任何内容并且是 void 方法 - 所以变量很可能已设置,但您的方法正在覆盖自动生成的 getter 并且没有返回任何内容。

在 Xcode 中做了一个测试

在头文件中我有:

@property (nonatomic, strong) NSURL *getURL;

然后在实现文件中我有:

- (void)documentURLReceived:(NSURL *)url
{
    _getURL = url;
    NSLog(@"%@",_getURL);
}

哪个输出:

2013-04-04 23:29:27.681 活力设计测试套件[90518:c07] http://www.google.com

okie dokie 我给你写了一个示例:

http://bit.ly/10yWb36

使用那些你可以去的:

MyViewController *mvc = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];
//Now you can set the myURL variable directly
[mvc setMyURL:[NSURL URLWithString:@"http://www.google.com"]];
NSLog(@"Direct Setting: %@",mvc.myURL);

//OR you can call the method your wrote
[mvc documentDidReceiveURL:[NSURL URLWithString:@"http://www.google.com"]];
NSLog(@"Selector Setting: %@",mvc.myURL);

输出:

2013-04-04 23:39:09.407 VitalityDesign[92197:c07] 直接设置:http://www.google.com 2013-04-04 23:39:09.408 VitalityDesign[92197:c07] 选择器设置:http://www.google.com

希望对你有帮助

【讨论】:

  • 我尝试使用XCode自动生成的方法,但它不起作用:/
  • @Lapinou:试着把方法名-(void)getUrl{改成-(void)getUrlMethod{然后说
  • 我更新了我的答案 - 你确定你的属性设置正确吗?我不能让它不工作
  • 完成。但不起作用:'(真的,我不明白为什么!
  • 是否曾经调用过 documentURLReceived?我注意到您之前说过: MyViewController *main = [[MyViewController alloc] init]; [主getUrl]; -- 假设你去掉了很好的 getURL 选择器 - 但是 - 这个变量什么时候真正被设置?此外,您的 NSURL 将为零——我会为您提供一个示例,请稍等...
【解决方案2】:

首先,你在 url 中得到了什么吗?

如果不是,-> 处理它

如果是,请尝试执行以下操作:

_getUrl = [[NSURL alloc] init];
_getUrl = url;
[_getUrl retain];
NSLog(@"Result: %@", _getUrl);

享受编程!

【讨论】:

  • 您(和 OP)在第二行分配新值时泄漏了在第一行创建的空 url。
  • 我非常了解@DavidRönnqvist,但有时这个技巧对我有用..
  • @ForamMukundShah,你应该调查一下为什么这个技巧对你有用。因为这是错误的
  • 在这里和那里添加额外的保留,直到您不再从僵尸中崩溃?
  • 是的,但我推荐@Lapinou,尝试一次。我想检查这个技巧是否对他有用。据我调查,这对他也有用
猜你喜欢
  • 1970-01-01
  • 2014-09-10
  • 1970-01-01
  • 1970-01-01
  • 2021-04-12
  • 1970-01-01
  • 1970-01-01
  • 2014-01-10
  • 2020-05-19
相关资源
最近更新 更多