我对一类中的一个属性有疑问。如果有什么不同,我正在使用 iOS 6.1 进行编码。
类UIViewController
和属性是在头文件中声明的,如下所示:
// Keeps track of time in seconds
@property (nonatomic, strong) NSNumber *timeInSeconds;
在我的实现文件中,我在 3 次使用该属性:
一是用方法加时间
- (void)addTime
一种是用方法减去时间
- (void)subtractTime
这两种方法使用如下属性:
- (void)addTime
{
CGFloat timeFloat = [self.timeInSeconds floatValue];
// Here I set the value of the property timeInSeconds, but I can't access that value later on in the code!
self.timeInSeconds = [NSNumber numberWithFloat:timeFloat +5];
NSLog(@"Total Time:%@", self.timeInSeconds);
}
这两种方法addTime
并subtractTime
做他们应该做的事情,并且timeInSeconds
当我添加然后减去然后添加时它们会很好地跟踪属性值......
问题是当我在同一个实现文件中调用第三种方法时:
- (void)updateLabelTime
{
self.label.attributedText = [[NSAttributedString alloc]initWithString:[self.timeInSeconds stringValue]];
[self.label setNeedsDisplay];
[NSTimer scheduledTimerWithTimeInterval:0.8 target:self selector:@selector(updateLabelTime) userInfo:nil repeats:YES];
}
我还尝试创建一个NSAttributedString
withstringWithFormat
而不是,initWithString
但问题仍然存在,它不是返回timeInSeconds
我之前使用addTime
and设置的属性的值subtractTime
,而是调用创建一个新实例的getter,timeInSeconds
因为在我的 getter 中我有惰性实例化.
我试图不为该属性编写 getter/setter(因为我使用的是 iOS 6.1),但这没有区别。
如果我只是将标签设置为一些随机字符串,它会起作用。问题是,如果我知道timeInSeconds
55 的值,它仍然会创建一个新的_timeInSeconds
.
因为我是法国人,所以我用我的英语尽力了,如果这个问题已经被一个初学者的 iOS 开发者问过,请不要回答,只是重定向我。不过没找到答案,谢谢!
编辑:这是自定义吸气剂
- (float)timeInSeconds
{
if (!_timeInSeconds) {
_timeInSeconds = 0;
}
return _timeInSeconds;
}
第二次编辑:
我犯的愚蠢的初学者错误是addTime和subtractTime实际上是在实现一个协议,他们设置了另一个类中“存在”的属性,这就是我无法访问它的原因!另一个需要该协议的类正在创建一个新的类实例,其中写入了 addTime 和 subtractTime。
需要做的是将控制器设置为协议的委托。我在 viewDidLoad 方法中这样做了:
self.view.delegate = self;
感谢所有的帮助。