2014-06-24 4 views
-1

타이머를 사용하여 매초마다 문자열을 교체하려고합니다. 일반적으로 나는 예를 들어NSString을 새로운 문자열로 바꾸기가 작동하지 않습니다.

myString = [CCLabelTTF labelWithString:varyingParameterLabelString fontName:@"Helvetica" fontSize:14];

을 수행하여 아주 쉽게있는 NSString을 대체 할 수 있지만, 어떤 이유로 내있는 NSString의 값을 업데이트하지 않습니다. 아래는 내가하려는 일이다. 말 그대로 그냥 복사하고 setupLabels 방법으로 내 타이머 방식의 마지막 줄을 붙여 넣을 경우

@implementation Grid 
{ 
    NSTimer *timeRemainingTimer; 
    CCLabelTTF *_varyingParameterLabelValue; 
} 


-(void)setupLabels{ 
    int timeRemaining = 30; 
    varyingParameterLabelValueString = [NSString stringWithFormat:@"%i", timeRemaining]; 
    timeRemainingTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(decreaseTimeRemaining) userInfo:nil repeats:TRUE]; 
    _varyingParameterLabelValue = [CCLabelTTF labelWithString:varyingParameterLabelValueString fontName:@"Helvetica" fontSize:20]; 
[self addChild:_varyingParameterLabelValue]; 
} 


-(void)decreaseTimeRemaining{ 
    timeRemaining--; 
    NSString *timeRemainingString = [NSString stringWithFormat:@"%i", timeRemaining]; 
    _varyingParameterLabelValue = [CCLabelTTF labelWithString:@"timeRemainingString" fontName:@"Helvetica" fontSize:20]; 
//Still reads 30 after this runs 
} 

, 그것은 보통 같은 문자열을 변경하지만 타이머 방식의 내부에 아무것도하지 않습니다. 타이머가 실행 중인지 확인하기 위해 기록했습니다. 도와 주셔서 감사합니다!

+0

"내 코드가 마음에 들지 않습니다."라는 말의 의미는 분명하지 않습니다. 더 자세한 정보를 제공 할 수 있습니까? –

+0

죄송합니다. 오도 된 경우 NSString을 업데이트하지 않습니다. – spaderdabomb

답변

2

decreaseTimeRemaining에서 timeRemainingString이라는 로컬 변수를 만들었지 만 레이블을 업데이트하는 데 절대로 사용하지 마십시오. 또한 기존 레이블을 갱신하는 대신 완전히 새로운 레이블을 작성합니다.

-(void)decreaseTimeRemaining{ 
    timeRemaining--; 
    NSString *timeRemainingString = [NSString stringWithFormat:@"%i", timeRemaining]; 
    [_varyingParameterLabelValue setString:timeRemainingString]; 
} 
+0

예, 수표로 사용하고 있습니다. 그래도 25로 업데이트하지 않습니다. timeRemainingString을 넣으면 업데이트도하지 않고 지금 편집했습니다 – spaderdabomb

+0

코드를 사용하면 나에게 오류가 발생하고 "changesParameterLabelValue '속성을 찾을 수 없습니다. 'My Class *'유형의 객체에 "..."분명히 "자체"에 추가 했음에도 불구하고 – spaderdabomb

+0

내가 말했듯이, 내가 복사하여 내 원래 코드를 상단 방법에 붙여 넣으면 작동합니다. 하지만 다른 방법으로 타이머에 의해 실행되는 어떤 이유로, 그것은하지 않습니다 ... – spaderdabomb