Hi, I have had a good search but can’t find the solution to my problem or how to implement it.
I have a process running in the background that I want to poll to determine that more than zero items match the criteria (I got this working). the problem is it locks up my app, I have tried
delay 1
and
do shell script “sleep 1”
in the forums people talk about performSelector:withObject:afterDelay: - but I have been trying for a couple of hours to get that working and I am just stuck, any ideas.
repeat while criteria > 0
say "running"
-- what delay code can I use :)
end repeat
Use something like this:
on checkProgress()
-- check whatever here
if stillWaiting then
my performSelector:"checkProgress" withObject:(missing value) afterDelay:1.0
else
-- do your stuff
end if
end checkProgress
Thanks so much that did it!
Amazing.
I find Apples documentation so impenetrable at times, really appreciate your help with this.
Polling is worst case and should be used only if you have no choice.
A better practice is to call a handler or send a notification in the background process
OK I spoke to soon, I have a feeling I’m misunderstanding what’s going on.
Basically I want it to keep checking until IsCount is 10.
This is my current code, but its not working,
on checkProgress:sender
if IsCount < 10 then
say "running"
my performSelector:"checkProgress" withObject:(missing value) afterDelay:1.0
else
say "finished"
end if
end checkProgress:
when I trigger checkProgress
I get this:
2019-08-03 12:32:30.149827+1000 background checker[32492] *** -[AppDelegate checkProgress]: unrecognized selector sent to object <AppDelegate @0x6000002979e0: OSAID(4) ComponentInstance(0x810000)>
2019-08-03 12:32:30.150054+1000 background checker[32492] [General] *** -[AppDelegate checkProgress]: unrecognized selector sent to object <AppDelegate @0x6000002979e0: OSAID(4) ComponentInstance(0x810000)>
2019-08-03 12:32:30.151015+1000 background checker[32492] [General] (
0 CoreFoundation 0x00007fff435672fd __exceptionPreprocess + 256
1 libobjc.A.dylib 0x00007fff6dc38a17 objc_exception_throw + 48
2 AppleScriptObjC 0x00007fff41886c7f -[BAObjectProto methodSignatureForSelector:] + 0
3 CoreFoundation 0x00007fff4350918f forwarding + 1485
4 CoreFoundation 0x00007fff43508b38 _CF_forwarding_prep_0 + 120
5 Foundation 0x00007fff4575d6fa __NSFireDelayedPerform + 411
6 CoreFoundation 0x00007fff434d0060 CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION + 20
7 CoreFoundation 0x00007fff434cfc0c __CFRunLoopDoTimer + 851
8 CoreFoundation 0x00007fff434cf752 __CFRunLoopDoTimers + 330
9 CoreFoundation 0x00007fff434b0962 __CFRunLoopRun + 2130
10 CoreFoundation 0x00007fff434afebe CFRunLoopRunSpecific + 455
11 HIToolbox 0x00007fff4270f1ab RunCurrentEventLoopInMode + 292
12 HIToolbox 0x00007fff4270eee5 ReceiveNextEventCommon + 603
13 HIToolbox 0x00007fff4270ec76 _BlockUntilNextEventMatchingListInModeWithFilter + 64
14 AppKit 0x00007fff40aa779d _DPSNextEvent + 1135
15 AppKit 0x00007fff40aa648b -[NSApplication(NSEvent) _nextEventMatchingEventMask:untilDate:inMode:dequeue:] + 1361
16 AppKit 0x00007fff40aa05a8 -[NSApplication run] + 699
17 AppKit 0x00007fff40a8fae8 NSApplicationMain + 777
18 background checker 0x0000000100000f55 main + 101
19 libdyld.dylib 0x00007fff6f4063d5 start + 1
20 ??? 0x0000000000000003 0x0 + 3
)
You’ve changed the method from checkProgress to checkProgress: with an argument, so you need to change the selector and object (if you use it) accordingly.
my performSelector:"checkProgress:" withObject:sender afterDelay:1.0
Thanks, that did it.
I also bought your book, hopefully will stop me having to ask for too much help.