If you read the documentation for NSObject's performSelector:withObject:afterDelay it tells you which method you need to use to cancel it again, and it's not NSRunLoop's cancelPerformSelector:target:argument.
On 22 May, 2014, at 1:34 pm, Gerriet M. Denkmann <gerr...@mdenkmann.de> wrote: > > I have this code: > > - (void)speechSynthesizer:(AVSpeechSynthesizer *)synthesizer > didFinishSpeechUtterance:(AVSpeechUtterance *)utterance > { > NSTimeInterval delay = 5; > NSLog(@"%s will resume music in %g sec.",__FUNCTION__, delay ); > NSRunLoop *currentRunLoop = [ NSRunLoop currentRunLoop ]; // > not nil > [ currentRunLoop cancelPerformSelector: @selector(resumeMusic) target: > self argument: nil ]; > [ self performSelector: @selector(resumeMusic) withObject: nil > afterDelay: delay ]; > } > > - (void)resumeMusic > { > NSLog(@"%s Done!",__FUNCTION__ ); > } > > When I speak something 7 times I get: > > 12:13:56.508 -[ContentViewController > speechSynthesizer:didFinishSpeechUtterance:] will resume music in 5 sec. > 12:13:57.724 -[ContentViewController > speechSynthesizer:didFinishSpeechUtterance:] will resume music in 5 sec. > 12:13:58.908 -[ContentViewController > speechSynthesizer:didFinishSpeechUtterance:] will resume music in 5 sec. > 12:14:00.115 -[ContentViewController > speechSynthesizer:didFinishSpeechUtterance:] will resume music in 5 sec. > 12:14:01.324 -[ContentViewController > speechSynthesizer:didFinishSpeechUtterance:] will resume music in 5 sec. > 12:14:01.527 -[ContentViewController resumeMusic] Done! > 12:14:02.520 -[ContentViewController > speechSynthesizer:didFinishSpeechUtterance:] will resume music in 5 sec. > 12:14:02.730 -[ContentViewController resumeMusic] Done! > 12:14:03.700 -[ContentViewController > speechSynthesizer:didFinishSpeechUtterance:] will resume music in 5 sec. > 12:14:03.929 -[ContentViewController resumeMusic] Done! > 12:14:05.126 -[ContentViewController resumeMusic] Done! > 12:14:06.339 -[ContentViewController resumeMusic] Done! > 12:14:07.523 -[ContentViewController resumeMusic] Done! > 12:14:08.705 -[ContentViewController resumeMusic] Done! > > But I would expect just to get *one* call to "resumeMusic" - 5 sec after the > last call to speechSynthesizer:didFinishSpeechUtterance:. Instead I get 7 > calls - each 5 sec after the didFinishSpeechUtterance. > Seems that cancelPerformSelector has no effect at all. > > What am I doing wrong? > iOS 7.1.1 > > Gerriet. > > > _______________________________________________ > > Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) > > Please do not post admin requests or moderator comments to the list. > Contact the moderators at cocoa-dev-admins(at)lists.apple.com > > Help/Unsubscribe/Update your Subscription: > https://lists.apple.com/mailman/options/cocoa-dev/rols%40rols.org > > This email sent to r...@rols.org _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com