我有两个类,Class1(UIViewController)和Class2(NSObject)。在Class2中,我有一个属性timerCount,每4秒增加1。我想将该值设置为Class1中的标签,但它只返回0.但是直接在Class2中它返回正确的值。
Class2.h
@property (nonatomic) int timerCount;
Class2.m
@synthesize timerCount;
- (void)timerStart {
self.timerCount = 0;
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:4.0 target:self selector:@selector(timerIncrement) userInfo:nil repeats:YES];
[timer fire];
}
- (void)timerIncrement {
self.timerCount = self.timerCount+1;
Class1 *cls1 = [[Class1 alloc] init];
[cls1 updateTimeLabel];
NSLog(@"%@", [NSString stringWithFormat:@"%i", self.timerCount]); //logs correct numbers
}
Class1.m
- (void)updateTimeLabel {
Class2 *cls2 = [[Class2 alloc] init];
NSLog(@"%@", [NSString stringWithFormat:@"%i", cls2.timerCount]); //logs 0 every 4 second
}
所以我的问题是,可能出现什么问题?
更新 Class2.m
- (void)completeTransaction:(SKPaymentTransaction *)transaction {
NSLog(@"completeTransaction...");
[self provideContentForProductIdentifier:transaction.payment.productIdentifier];
[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
//initialize the timer and start it
cls1 = [[Class1 alloc] init];
self.timerCount = 0;
timer = [NSTimer scheduledTimerWithTimeInterval:4.0 target:self selector:@selector(timerIncrement) userInfo:nil repeats:YES];
[timer fire];
}
- (void)timerIncrement {
self.timerCount = self.timerCount-1;
[cls1 updateTimeLeftLabel];
NSLog(@"%@", [NSString stringWithFormat:@"IAP: %i", self.timerCount]);
}
Class1.m
- (void)viewDidLoad {
cls2 = [[Class2 alloc] init];
}
- (void)updateTimeLeftLabel
{
NSLog([NSString stringWithFormat:@"%i", cls2.timerCount]);
}
答案 0 :(得分:2)
您正在updateTimeLabel
方法中创建一个新的临时 Class2 对象。您应该引用正在运行计时器的原始 Class2 对象。
答案 1 :(得分:1)
每次新实例都不应该创建。这只是你收到0的原因。因为每个新实例都指向新地址。
仅创建单个实例并使用它。