2009-03-01 18 views
1

Dönüşü değer al Böyle kurulum olan bir NSTimer vardır:NSTimer en Hedef

[NSTimer scheduledTimerWithTimeInterval:0.5 target:timerTarget selector:NSSelectorFromString(targetSelector) userInfo:nil repeats:YES]; 
Ben timerTarget yöntemin dönüş değeri nasıl alabilirim

?

cevap

5

Yapamazsınız, çünkü dönüş değeri yoktur. Quoth

documentation of the scheduledTimerWithTimeInterval::::: method:

seçici aşağıdaki imzası olması gerekir: Şimdi

- (void)timerFireMethod:(NSTimer*)theTimer 

, sen farklı ve daha sonra yöntem bildirmek içinde bir değer geri dönebilirler ama o zaman yönteminizin NSTimer'in beklediğinden farklı bir imzası var. Bu şimdi iyi çalışıyor, ancak gelecekte çalışmak garanti edilmez - özellikle çalışma zamanında bir değişiklik, herhangi bir zamanda kırılabilir.

NSTimer bir geri dönüş değeri beklemediğinden, bir tane almak ve herhangi bir yere iletmek için hiçbir hüküm yoktur.

Ayrıca, Adam'ın cevabı hakkındaki yorumumda da belirttiğim gibi, scheduledTimerWithTimeInterval::::: numaralı telefona yaptığınız çağrı sadece bir kez geri döner ve (Adam'ın söylediği gibi) derhal yapar. Her 0,5 saniyede bir geri dönüş değeri alamazsınız, çünkü her 0.5 saniyede bir geri dönüş almazsınız - bir geri dönüş sadece (zamanlayıcı başına) alırsınız.

Zamanlayıcı yönteminizde öğrendiğiniz bilgiler ne olursa olsun, burada işlem yapmanız veya oradan başka bir yönteme bilgi içeren bir ileti göndermeniz gerekir.

5

Dönüş değeriyle ne yapıyorsunuz? Hedef, eşzamansız olarak 0,5 saniye sonra çalıştırılır. scheduledTimerWithTimeInterval:target:selector:useInfo:repeats: numaralı çağrı, anında, hedefin çalışmadığı noktada döndürülür. şu an numaralı döndürme değerine gerçekten ihtiyacınız varsa, bir zamanlayıcı ile uğraşmayın ve seçiciyi normal olarak arayın.

+0

Her bir .5 saniyede bir dönüş değerine ihtiyacım var. Hedef, sık sık değişen bir değeri izliyor ve bir değerin gerçekte gerçekleşip gerçekleşmediğini görebilmek için bu değeri döndürüyor. – macinjosh

+1

Ardından, zamanlayıcı yöntemindeki değişiklik üzerinde hareket etmelisiniz. Unutmayın, planlananTimerWithTimeInterval ::::: sadece * bir kez * döndürür. Zamanlayıcıya yapılan her çağrı için bir kez geri dönmez. TarifedTimeTimer… ::::: bir kez aradığınızda, bir kez geri döner. –

1

Adam'ın iyi cevabını takip ederek, çalışmayı bitirdikten sonra hedeflenen yöntemin geri dönüş değerine ihtiyacınız olduğunu düşünüyorsanız, muhtemelen ne yapmak istediğinizi hedeflenen yöntemin başka bir eylemi sürdürmesi gerekir. Örneğin, ilgili nesneye (kendiliğinden?) Bir başvuru boyunca iletmek için "userInfo" parametresini kullanabilirsiniz. Örneğin, "userInfo" parametresini kullanabilirsiniz. Hedeflenen yöntem, bir değer döndürmek yerine, önceden ayarlanmış bir seçici ile güncellenmiş değeri kendi kendine gönderebilir. İsterseniz gelecekte oluyor ona yöntem zamanlayıcı tarafından çağrılan gerçeğini Adem'in tavsiye almak ve dikkate almak gerekir

[[theTimer userInfo] setWhatever:blah]; 

Kavramsal olarak ve: Hedef yönteminde Örneğin, gibi bir şey ile bitebilir belirli bir sınıfa ve iş akışına geri bağlanın, bir şekilde kendiniz bağlamanız gerekir.