Re: BIG Thread problem (theorical).. need some advice.
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