Hi Jens,

There is definitely something fishy going on, I’ll explain the process and how 
I am handling it. There is probably a much better way of doing it and if so I’m 
happy to redesign it.

In order to kick off a Network an third part App needs to be run which starts 
up a process that “looks” for available networks. When it finds one it makes it 
available for my App.

My App needs to grab the state of a Network which is handling by a third party 
package. The only way in which to check if a network is available is to attempt 
to create a Network Object (e.g. myNetwork [[Network alloc] initWithXXXXX];). 
If it returns nil, then the Network was not available. So the only way to 
ensure a Network is available is to Poll it. 

My App does this:

User Clicks the  “Connect” button, this launches the Third Party App and then 
runs an AppleScript to tell it to start looking for Network.

The Button handler in my App then starts a timer that Polls the Network every 
0.10 seconds. The Timer handler basically does a Alloc/Init and if it gets nil 
restarts the timer to try again a bit later on. If it gets non nil, then it 
sends a “NetworkConnected” notification. 

The Button Handler then calls “waitForNetworkConnection” which checks if there 
is a valid Network stored in a “connectedNetworksDictionary which is a property 
of the WindowController.
If it is not in the dictionary it calls itself back after a delay. So the 
button handler will return, but the “waitForNetworkConnection” will be called 

The  “NetworkConnected” notification handler then the stores the Network in the 
“connectedNetworksDictionary” property.

Accesses to the “connectedNetworksDictionary” are protected in an @synchronised 
block.

I noticed that the UI stops responding while stepping through the following 
code.

//** THIS STATUS MESSAGE IS SEEN

myNetworkStatusString = [[NSString alloc] initWithFormat:@"Executing Script %@ 
for Target Network: 
%@",myNetworkleScriptFilePath,theNetworkConfigInfo.pNetworkConfigInternalID];
[self updateUIStatusWithInfoMessage:myNetworkStatusString];

myNetworkleScriptSourceString = [[NSString alloc] 
initWithContentsOfFile:myNetworkleScriptFilePath encoding:NSUTF8StringEncoding 
error:&myErrorInfo];
if (myErrorInfo != nil)
        {
        myNetworkStatusString = [[NSString alloc] initWithFormat:@"Script 
Compile Error %@ for Target Network: 
%@",myNetworkleScriptFilePath,theNetworkConfigInfo.pNetworkConfigInternalID];
        [self updateUIStatusWithErrorMessage:myNetworkStatusString];
        return NO;
        }
        
myNetworkleScript = [[NSNetworkleScript alloc] 
initWithSource:myNetworkleScriptSourceString];
[myNetworkleScript executeAndReturnError:&myErrorDictionary];
if (myErrorDictionary != nil)
        {
        myNetworkStatusString = [[NSString alloc] initWithFormat:@"Script 
Execution Error %@ for Target Network: 
%@",myNetworkleScriptFilePath,theNetworkConfigInfo.pNetworkConfigInternalID];
        [self updateUIStatusWithErrorMessage:myNetworkStatusString];
        return NO;
        }

//** UI STOPS UPDATING HERE

myNetworkStatusString = [[NSString alloc] initWithFormat:@"Script Complete %@ 
for Target Network: 
%@",myNetworkleScriptFilePath,theNetworkConfigInfo.pNetworkConfigInternalID];
[self updateUIStatusWithInfoMessage:myNetworkStatusString];

So I’m wondering if it is something to do with the AppleScript handling? The 
Script works ok if I run it from the Script Editor and it compiles and runs ok.

Any help on this would be greatly appreciated.

All the Best
Dave

> On 21 Sep 2016, at 17:20, Dave <d...@looktowindward.com> wrote:
> 
> Hi,
> 
> This doesn’t work probably because the Class is that is calling back the 
> delegate method that updates the Scroll View is also being run on the main 
> thread. Sorry I should have said this earlier. I tried updating the UI on a 
> background thread and it seemed to work BUT I got warning message from 
> CALayer or maybe CATransaction and I think it caused the App to hang.
> 
> The time consuming method I am calling is in a third party library and it 
> must be called in the main thread. 
> 
> All the Best
> Dave
> 
>> On 21 Sep 2016, at 17:01, Sandor Szatmari <admin.szatmari....@gmail.com> 
>> wrote:
>> 
>> In general, one simple form is:
>> 
>> dispatch_async( dispatch_get_main_queue(), ^{
>> // do UI updates on the main thread.
>> });
>> 
>> This can also be done with NSOperationQueue:
>> 
>> [[NSOperationQueue mainQueue] addOperationWithBlock:^{
>> // do UI updates on main thread.
>> }];
>> 
>> Sandor Szatmari
>> 
>> On Sep 21, 2016, at 11:40, Dave <d...@looktowindward.com 
>> <mailto:d...@looktowindward.com>> wrote:
>> 
>>> Hi All,
>>> 
>>> How can I update my UI from a background thread?
>>> 
>>> I have a method that does a LOT of intense processing, it calls a delegate 
>>> method in my Window Controller which appends it to a Logging Scroll View, 
>>> however nothing shows up in the Scroll View although it NSLog’s the string 
>>> ok.
>>> 
>>> Firstly is it ok to do this? When I tried it I got a CALayer error reported 
>>> in the NSLog output.
>>> 
>>> All the Best
>>> Dave
>>> 
>>> 
>>> _______________________________________________
>>> 
>>> Cocoa-dev mailing list (Cocoa-dev@lists.apple.com 
>>> <mailto: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 
>>> <http://lists.apple.com/>
>>> 
>>> Help/Unsubscribe/Update your Subscription:
>>> https://lists.apple.com/mailman/options/cocoa-dev/admin.szatmari.net%40gmail.com
>>>  
>>> <https://lists.apple.com/mailman/options/cocoa-dev/admin.szatmari.net%40gmail.com>
>>> 
>>> This email sent to admin.szatmari....@gmail.com 
>>> <mailto:admin.szatmari....@gmail.com>
> _______________________________________________
> 
> 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/dave%40looktowindward.com
> 
> This email sent to d...@looktowindward.com


_______________________________________________

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

Reply via email to