为什么UIWebKit会抛出结构复杂性贡献异常?

时间:2010-03-31 15:24:47

标签: iphone objective-c uiwebview svg

我的iPhone应用程序中有一个简单的UIWebView,它加载了一些嵌入了SGV的XHTML文档。这一切都可以在Safari的桌面版本上找到,但它会在UIWebView中崩溃。

这是目标C:

NSString *path = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"html"];
NSData *fileData = [NSData dataWithContentsOfFile: path];
[svgView loadData: fileData MIMEType: @"text/xml" textEncodingName: @"UTF-8" baseURL: [NSURL fileURLWithPath: path]];

我还尝试了一个MIMEType的application / xhtml + xml,但它没有帮助。

这是HTML:

<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
  <title>XTech SVG Demo</title> 
</head> 
<body> 
<svg xmlns="http://www.w3.org/2000/svg"> 
  <g style="fill-opacity:0.7;"> 
    <circle cx="6.5cm" cy="2cm" r="100" style="fill:red; stroke:black; stroke-width:0.1cm" transform="translate(0,50)" /> 
    <circle cx="6.5cm" cy="2cm" r="100" style="fill:blue; stroke:black; stroke-width:0.1cm" transform="translate(70,150)" /> 
    <circle cx="6.5cm" cy="2cm" r="100" style="fill:green; stroke:black; stroke-width:0.1cm" transform="translate(-70,150)"/> 
  </g> 
</svg>
</body> 
</html> 

所有非常基本的东西。然而,当它在iPhone上加载时,它会因此错误而崩溃:

2010-03-31 10:37:10.252 ColorDoodle [2014:20b] - [DOMElement structuralComplexityContribution]:无法识别的选择器发送到实例0x3e51b60 2010-03-31 10:37:10.253 ColorDoodle [2014:20b]由于未捕获的异常'NSInvalidArgumentException'终止应用程序,原因:' - [DOMElement structuralComplexityContribution]:无法识别的选择器发送到实例0x3e51b60'

知道为什么吗?这是UIWebView的渲染引擎中的错误吗?我在这里看不出太奇怪的事。

*已更新*

这里肯定会发生一些棘手的问题。

如果我在标签内添加这段代码,它可以正常工作:

<form>
</form>

取回该代码,然后再次崩溃。

2 个答案:

答案 0 :(得分:1)

我一直在努力解决这个问题。添加<form></form>标签对我来说没有任何区别,并且该错误至少持续到OS 3.1.3,从我在iPhone模拟器中的测试来判断。

但是,我找到了一个简单的解决方法,即使用<img />属性的data: URI在src代码中显示SVG标记。

您可以对SVG标记进行Base64或URL编码。不出所料,它在URL编码时gzips更好。 (事实上​​,如果你将HTML作为text/html提供服务,只要你没有用错误的引号标记结束src属性,你就可以在没有编码SVG的情况下侥幸逃脱在SVG里面。)

答案 1 :(得分:0)

看起来像WebKit中的一个错误。不应该发生。归档吧。