试图从另一个类Objective-c访问属性

时间:2013-12-13 17:35:48

标签: ios objective-c

我有两个类,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]);    
}

2 个答案:

答案 0 :(得分:2)

您正在updateTimeLabel方法中创建一个新的临时 Class2 对象。您应该引用正在运行计时器的原始 Class2 对象。

答案 1 :(得分:1)

每次新实例都不应该创建。这只是你收到0的原因。因为每个新实例都指向新地址。

仅创建单个实例并使用它。