2016-08-13 95 views
0

的Xcode 7.3雨燕2.2崩溃的HTML字符串转换时NSAttributedString

在迅速的文件运行存档我有一个字符串extention是HTML文本转换为NSAttributedString。

extension String { 
    func htmlAttributedString() -> NSAttributedString? { 
     guard let data = self.dataUsingEncoding(NSUTF16StringEncoding, allowLossyConversion: false) else { return nil } 
     guard let html = try? NSMutableAttributedString(data: data, options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType], documentAttributes: nil) else { return nil } 
     return html 
    } 
} 

我这样使用它。

let HTMLstr = "<p><b>hello</b> world</p>" 
if let attrString = HTMLstr.htmlAttributedString() { 
    // do something here 
} 

它工作正常,我的手机上,并在模拟器,但是当我存档它,它会导致使用上面的代码中的崩溃。我认为问题在于dataUsingEncoding。任何想法为什么这会崩溃时使用存档应用程序。

编辑

我已经包含崩溃日志的标题:

Incident Identifier: 90C74E49-4C65-4556-B82D-6748437BB5BA 
CrashReporter Key: 4fb0e685f950c6cdecf7132b26f38ff54e013348 
Hardware Model:  iPhone7,1 
Process:    AppName [7813] 
Path:    /private/var/containers/Bundle/Application/1EE7C00E-7600-4D72-839D-8AEA834903B8/AppName.app/AppName 
Identifier:   uk.co.skymook.AppName 
Version:    1 (2.0) 
Code Type:   ARM-64 (Native) 
Parent Process:  launchd [1] 

Date/Time:   2016-08-13 12:16:08.08 +0100 
Launch Time:   2016-08-13 12:15:33.33 +0100 
OS Version:   iOS 9.3.2 (13F69) 
Report Version:  105 

Exception Type: EXC_BAD_ACCESS (SIGSEGV) 
Exception Subtype: KERN_INVALID_ADDRESS at 0x2000000000000000 
Triggered by Thread: 0 

Filtered syslog: 
None found 
+2

你可以在这里粘贴错误吗? –

回答

0

龙答:的解决方案是缓慢的精心调试。我必须仔细检查导致崩溃的所有代码,并确保正确的检查适用于可选项。所以我不得不屏蔽大量的代码,建立档案并将其缩小到许多功能。然后,我不得不封锁每一行代码,构建存档直到找到崩溃的代码。在应用程序中有数百行代码以及存档所需的时间,这并非易事。最后,一个可选项在零时解包。记住它在模拟器中解包并运行在调试中,我很惊讶地发现这个问题。

简短回答:这是一个可选项,用nil解包并且与上面的代码无关。存档时应用程序的处理方式稍有不同,编译器可以通过所有测试以验证代码的有效性。

吸取的教训是归档生产,并在整个开发过程中定期在手机上运行。