从另一个类访问的NSString - 0x8ad11a0似乎没有指向有效的对象

时间:2013-04-30 23:20:52

标签: ios nsstring

我在各种其他类中实例化价格代码类。这一切都很顺利。现在,我试图像这样添加一个属性:

PriceTicker.h

@interface PriceTicker : UIViewController {

NSString *_valueString;

}

@property (nonatomic, strong) NSString *valueString;

并将其合成为:

PriceTicker.m

@synthesize valueString = _valueString;_

然后在下面的各种方法中设置该值,是的,该值确实设置为由控制台输出等验证。

但是,当我在另一个类中实例化PriceTicker时,例如:

totalSavingsTicker = [[PriceTicker alloc] initWithNibName:@"CascadiaTicker" bundle:nil];

然后尝试将其值设置为局部变量,如下所示:

 NSString *savings = [[NSString alloc]init];

savings = totalSavingsTicker.valueString;

储蓄的价值不会设置为我从上面的日志中看到的valueString的值。

3 个答案:

答案 0 :(得分:0)

好的,这不能解答你的问题,但这让我疯了,所以请不要说:

NSString *savings = [[NSString alloc]init];
savings = totalSavingsTicker.valueString;

所有这一切都是使两个字符串,其中第一个字符串立即被丢弃,这是浪费和毫无意义的。这样说:

NSString *savings;
savings = totalSavingsTicker.valueString;

甚至更好,这个:

NSString *savings = totalSavingsTicker.valueString;

编辑:既然您已经更好地描述了您的问题,那么您将从调试器报告此消息:“无法打印NIL对象的描述”

这听起来对我来说是正确的。除非你主动做某事,否则所有对象属性都会设置为nil。所以当你说:

totalSavingsTicker = [[PriceTicker alloc] initWithNibName:@"CascadiaTicker" bundle:nil];
NSString *savings = totalSavingsTicker.valueString;

我希望期待 savings在那一刻是零,因为我希望那时valueString属性为零。您需要使用此视图控制器启动工作,将其视图添加到界面中等。

您后续评论的另一个问题是:

[self.savingsView addSubview:totalSavingsTicker.view];

这是非法的。您不能只是鲁莽地将视图控制器的视图添加到您的界面。您必须使用正确的父子视图控制器关系(否则根本不使用视图控制器)。

答案 1 :(得分:0)

您的问题是totalSavingsTicker是PriceTicker的新实例,而不是您设置valueString值的实例。您需要获取对屏幕上设置该值的实例的引用。在不知道控制器如何相互关联的情况下,我不能告诉你如何做到这一点。

答案 2 :(得分:0)

好的,我正在回答我自己的问题:

尽管人们提出的建议和批评对下一个项目和一般编码改进有帮助(谢谢你们)。通过简单地使用:

解决了这个问题
self.valueString

而不是

_valueString or valueString