Difficult to know exactly what's happening in your situation, but I’d be 
inclined to try something like:

                dispatch_time_t duration = dispatch_walltime(DISPATCH_TIME_NOW, 
offset_nsec);
                
                dispatch_after(duration, dispatch_get_main_queue(), ^{

                });

where offset_nsec is long enough to allow the app to complete it’s start-up 
process

Sandy

On Sep 5, 2014, at 10:31 PM, Jonathan Guy <jonathan...@mac.com> wrote:

> I’m using a third party c library that requires registering a callback which 
> gets called if the operation encounters an invalid server certificate (should 
> i accept or reject the cert). The callback needs to return yes or no, which I 
> need to get via a UI prompt so the prompt needs to block so I can return 
> appropriately from the callback. So my initial thoughts are “present the cert 
> in a modal window”. So I put the cert in a SFCertificateView in a scroll view 
> and present it in a modal window but it could not be scrolled up and down 
> which was the initial problem. I also tried the SFCertificatePanel with the 
> same problem. After testing I found I couldn’t scroll any scroll view so I 
> knocked up that small bit of code to show as an example. I tried using 
> performSelectorOnMainThread and waiting until completion and this funnily 
> enough works fine in terms of absolutely no UI weirdness but I can’t get a 
> return value from that plus there were other issues.
> There could be any number of operations running concurrently and any one 
> could require validation at any time.
> 
> The callback is basically structured like this
> 
>       __block BOOL accept;
>       
>       if ([NSThread isMainThread]) {
>               accept = [[Controller sharedController] shouldIAccept:certInfo];
>       }
>       else {
>               dispatch_sync(dispatch_get_main_queue(), ^{
>                       accept = [[Controller sharedController] 
> shouldIAccept:certInfo];
>                       // This is where UI starts playing up when the 
> controller shows the cert
>               });
>       }
>       
>       return accept;
> 
> So the shouldIAccept method needs to block hence runModal. I also just threw 
> the window up and created my own modal loop but same problem.
> 
> On 5 Sep 2014, at 19:59, Jens Alfke <j...@mooseyard.com> wrote:
> 
>> 
>>> On Sep 5, 2014, at 11:44 AM, Jonathan Guy <jonathan...@mac.com> wrote:
>>> 
>>> when the NSOpenPanel opens all kinds of weirdness is going on. The scroll 
>>> views scroll very erratically if at all and the directories don't list 
>>> properly. 
>> 
>> Well, you've blocked one of the threads that services the global dispatch 
>> queue — it's stuck in a dispatch_sync call that won't return until the user 
>> dismisses the open panel. I don't know exactly what kinds of problems 
>> blocking the queue will cause, but it's definitely not a good idea. (The 
>> problems you report sound more severe than what I would guess would happen, 
>> but I definitely don't know how concurrent dispatch queues are implemented.)
>> 
>> You should rewrite your code to use dispatch_async instead. Then when the 
>> modal session completes, call back to the global dispatch queue to finish 
>> running your code.
>> 
>> (And the whole scenario you're giving sounds like bad UI design — your code 
>> shouldn't suddenly pop up a modal panel just because you "need a file from 
>> the user". The user should be in control of tasks like opening files. But 
>> you may have created an unrealistic scenario just as an example…)
>> 
>> —Jens
> 
> _______________________________________________
> 
> 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/mcguffogl%40gmail.com
> 
> This email sent to mcguff...@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/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to