如何在monotouch中使用此Objective-C代码

时间:2012-09-15 16:51:32

标签: objective-c uiwebview xamarin.ios

我需要在视图控制器中使用多个UIWebView,但在启动应用程序几分钟后,它会因LoadRequest而崩溃。

我为UIWebViewDelegate找到了此代码块here,但我无法将其成功转换为C#。

-(void)spinlockedWebViewLoad:(NSArray*)arr {
  NSAutoreleasePool* pool=[[NSAutoreleasePool alloc] init];
  UIWebView* webView=(UIWebView*)[arr objectAtIndex:0];
  NSURLRequest* request=(NSURLRequest*)[arr objectAtIndex:1];
  @synchronized(self) {
  spinlock=webView;
  [webView loadRequest:request];
  while (spinlock==webView) [NSThread sleepForTimeInterval:0.1];
  }
  [pool drain];
 }

-(BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType {
  if (spinlock!=webView) {
     [NSThread detachNewThreadSelector:@selector(spinlockedWebViewLoad:) toTarget:self withObject:[NSArray arrayWithObjects:webView,request,nil]];
     return NO;
  }
  return YES;
}

1 个答案:

答案 0 :(得分:0)

在您的代码中,不需要使用(ObjectiveC样式)委托,只需使用托管事件:

void SpinlockedWebViewLoad (NSObject [] arr)
{
    ...
    UIWebView webView  = (UIWebView) arr [0];
    webView.ShouldStartLoad += ShouldStartLoad;
    ...
}

bool ShouldStartLoad (UIWebView webView, NSUrlRequest FileWebRequest, UIWebViewNavigationType navigationType)
{
    ...
}