Hi,

I've written a document-based Cocoa application on OS X which displays graphs 
visually by opening an ASCII file.

My program has also the possibility to append ASCII files to the current 
document: when a user chooses the "Append …" menu in the File
Menu a sheet opens with a NSTextField appendingTextField which *should* display 
the current files (along with a "Cancel" button), and
if the file's matches the current document by comparing some values (date / 
time / location) etc.

While appending and combining these files together takes some time (can take up 
to more than 10s)
 the sheet is properly displayed (with its TextField and button) for the 
current document window, but the textField stringValue can't be set
Maybe because it's the sheet is on a different thread ?…

I've tried to get the sheet's textField string setting on the main queue to 
allow the update, but this doesn't work either….
Does someone have any clues ?

What I've done so far:

init method:

appendFilesSheet = [[AppendFilesProcessingSheetWindowController alloc]
                            
initWithWindowNibName:@"AppendFilesProcessingSheetWindowController"];

Then in:

- (IBAction)appendfFiles:(id)sender
{    
        // Open the panel to append files
        NSOpenPanel *openPanel = [NSOpenPanel openPanel];
        [openPanel beginSheetModalForWindow:window completionHandler:nil];
       NSArray *filesToAppend;

    NSInteger result = [openPanel runModal];
        if (result == NSFileHandlingPanelOKButton) 
    {
        filesToAppend = [openPanel URLs];
    }
    
    [openPanel orderOut:self];
    [NSApp endSheet:openPanel];
    
    openPanel = nil;  // preventing strong ref cycle
    …
   …..

 NSString *appendedTsoftString;

    [NSApp beginSheet:[appendFilesSheet window]
           modalForWindow:window
            modalDelegate:nil
           didEndSelector:nil
              contextInfo:nil];
        

        // Combine the files….
         appendedTsoftString = [[NSString alloc] initWithString:[self 
combineFiles:filesToAppend withError:&appendError]];
      
So inside the combineFiles method I try to update the appendTextField
…

 // Update count since we got new append files
    countAppendedFiles = [tsfFiles count];
    
    void (^appendBlock)(void);
    
    appendBlock = ^{
        
        dispatch_async(dispatch_get_main_queue(), ^{
                [[appendFilesSheet appendTextField] setStringValue:@"Appending 
Files..."];
            //[[appendFilesSheet appendTextField] setNeedsDisplay: YES];
            NSLog(@"[appendFilesSheet appendTextField] stringValue: %@", 
[[appendFilesSheet appendTextField] stringValue]);
        });
    };
    
    //Run the block on a different thread.
    dispatch_queue_t queue = 
dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    dispatch_async(queue,appendBlock);
    …


Any help would be greatly appreciated!

Cheers,

Gilles




    



_______________________________________________

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