• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: BIG Thread problem (theorical).. need some advice.
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: BIG Thread problem (theorical).. need some advice.


  • Subject: Re: BIG Thread problem (theorical).. need some advice.
  • From: Gustavo Pizano <email@hidden>
  • Date: Tue, 26 Jan 2010 13:52:21 +0100

I did a solution like this

-(NSDictionary *)pListWithWebElements{
	if(_exporter == nil){
		_exporter = [[XWSC2WExporter alloc] init];
	}

	NSString * htmlString  = [_exporter generateExportedHTMLFromLayouts:_layoutsArray];
	if(_webController == nil){
		_webController = [[XWSPreviewWebController alloc] initWithWindowNibName:@"XWSPreviewWeb"];
		[_webController set_parentController:self];
	}
	[_webController showWindow:self];
	[_webController set_htmlString:htmlString];
	flagLoad = NO;

	while ( !flagLoad && [[ NSRunLoop currentRunLoop ] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]){
		NSLog(@"WAITING");
	}

	return pListWithWebElements;
}

#pragma mark LoadFrameDelegate.
-(void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame{
	WebArchive * wa = [[frame dataSource] webArchive];
	NSData * data = [wa data];
	// uses toll-free bridging for data into CFDataRef and CFPropertyList into NSDictionary
	CFPropertyListRef plist =  CFPropertyListCreateFromXMLData(kCFAllocatorDefault, (CFDataRef)data,
															   kCFPropertyListMutableContainersAndLeaves,
															   NULL);
	// we check if it is the correct type and only return it if it is
	if ([(id)plist isKindOfClass:[NSDictionary class]])
	{
		[self setPListWithWebElements:[(NSDictionary *)plist autorelease]];
	}
	else
	{
		// clean up ref
		CFRelease(plist);
	}

	flagLoad = YES;
}


I duno if its the best solution but it works.. Im open to hear other approaches...

thanks
Gustavo


On Jan 26, 2010, at 12:56 PM, Gustavo Pizano wrote:

> Hello all.
> I have this situation:
> I have a WebView which mainFrame Im loading form a NSString,  then Im implementing the delegate :
>
> -(void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame;
>
> to check when the frame finish loading I can generate a pList to return to the caller. BUT this method its called only when the frame did load, as it says., and Im returning the dicitonary before this method its even called.
>
> this is what I have
>
> -(NSDictionary *)pListWithWebElements{
> 	if(_exporter == nil){
> 		_exporter = [[XWSC2WExporter alloc] init];
> 	}
>
> 	NSString * htmlString  = [_exporter generateExportedHTMLFromLayouts:_layoutsArray];
> 	if(_webController == nil){
> 		_webController = [[XWSPreviewWebController alloc] initWithWindowNibName:@"XWSPreviewWeb"];
> 		[_webController set_parentController:self];
> 	}
> 	[_webController showWindow:self];
> 	[_webController set_htmlString:htmlString];
>
> 	return pListWithWebElements;
> }
>
> #pragma mark LoadFrameDelegate.
> -(void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame{
> 	WebArchive * wa = [[frame dataSource] webArchive];
> 	NSData * data = [wa data];
> 	// uses toll-free bridging for data into CFDataRef and CFPropertyList into NSDictionary
> 	CFPropertyListRef plist =  CFPropertyListCreateFromXMLData(kCFAllocatorDefault, (CFDataRef)data,
> 															   kCFPropertyListMutableContainersAndLeaves,
> 															   NULL);
> 	// we check if it is the correct type and only return it if it is
> 	if ([(id)plist isKindOfClass:[NSDictionary class]])
> 	{
> 		[self setPListWithWebElements:[(NSDictionary *)plist autorelease]];
> 	}
> 	else
> 	{
> 		// clean up ref
> 		CFRelease(plist);
> 	}
>
> }
>
> so form the first methohd when I reach the return statement, the ivar its nil because it hasn't been initialized by the webframeload delegate.
>
> What do I need to do to return the ivar initialized? this is my first time encounter with a multithreading problem, Im totaly new to this topic, but I undertand that I must somehow wait for one thread to finish to be able to return the data on the main thread... am I wrong?
>
> Also I dunno if this shall be here or in WebKit so please if you feel it shouldn't be here let me know and I post it in the webKit dev List
>
> Thanks a lot
>
> Regards
>
> Gustavo Pizano
>

_______________________________________________

Cocoa-dev mailing list (email@hidden)

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:

This email sent to email@hidden

  • Follow-Ups:
    • Re: BIG Thread problem (theorical).. need some advice.
      • From: Louis Gerbarg <email@hidden>
References: 
 >BIG Thread problem (theorical).. need some advice. (From: Gustavo Pizano <email@hidden>)

  • Prev by Date: Re: Centering a window on the *current* screen, not the *main* screen
  • Next by Date: Re: BIG Thread problem (theorical).. need some advice.
  • Previous by thread: BIG Thread problem (theorical).. need some advice.
  • Next by thread: Re: BIG Thread problem (theorical).. need some advice.
  • Index(es):
    • Date
    • Thread