KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I'm having a hard time figuring out how to put this all together. I have a puzzle solving app on the mac. You enter the puzzle, press a button, and while it's trying to find the number of solutions, min moves and such I would like to keep the UI updated. Then once it's finished calculating, re-enable the button and change the title. Below is some sample code from the button selector, and the solving function: ( Please keep in mind I copy/paste from Xcode so there might be some missing {} or some other typos.. but it should give you an idea what I'm trying to do. Basicly, user presses a button, that button is ENABLED=NO, Function called to calculate puzzle. While it's calculating, keep the UI Labels updated with moves/solution data. Then once it's finished calculating the puzzle, Button is ENABLED=YES; Called when button is pressed: - (void) solvePuzzle:(id)sender{ solveButton.enabled = NO; solveButton.title = @"Working . . . ."; // I've tried using this as a Background thread, but I can't get the code to waitTilDone before continuing and changing the button state. [self performSelectorInBackground:@selector(createTreeFromNode:) withObject:rootNode]; // I've tried to use GCD but similar issue and can't get UI updated. //dispatch_queue_t queue = dispatch_queue_create("com.gamesbychris.createTree", 0); //dispatch_sync(queue, ^{[self createTreeFromNode:rootNode];}); } // Need to wait here until createTreeFromNode is finished. solveButton.enabled=YES; if (numSolutions == 0) { solveButton.title = @"Not Solvable"; } else { solveButton.title = @"Solve Puzzle"; } } Needs to run in background so UI can be updated: -(void)createTreeFromNode:(TreeNode *)node { // Tried using GCD dispatch_queue_t main_queue = dispatch_get_main_queue(); ...Create Tree Node and find Children Code... if (!solutionFound){ // Solution not found
Tags (comma-separated)
Save Edits
Cancel