2016-11-21 2 views
2

Hallo Ich verwende den folgenden Code, um HTML in NSAttributedString zu konvertieren. Mein Problem ist, dass es lange Zeit die erste Zeit in Anspruch nimmt, dass ich es ausgeführt:Wie zu minimieren Zeit Umwandlung von HTML in NSAttributedString

var html = "<b>Whatever...</b>"  
var attributedText = try! NSMutableAttributedString(
     data: html.data(using: String.Encoding.unicode, allowLossyConversion: true)!, 
     options: [ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType], 
     documentAttributes: nil) 

Wenn ich die Umwandlung zum ersten Mal durchführen, ist es lange Ausführung dauert. Die folgenden Ausführungen benötigen weniger Zeit. Gibt es eine Möglichkeit, diese lange erste Ausführung zu verringern? Ich dachte daran, diesen Code im Hintergrund am Anfang meiner App Ausführung auszuführen, aber ich möchte wissen, ob es andere intelligente Lösung oder Bibliothek gibt, die ich importieren sollte.

+0

Von Ihrer potentiellen Lösung, beachten Sie, dass aus dem doc: 'Der HTML-Importeur sollte nicht aus aufgerufen werden ein Hintergrundthread (dh das Optionsverzeichnis enthält NSDocumentTypeDocumentAttribute mit einem Wert von NSHTMLTextDocumentType). " – Larme

+0

Es ist eine großartige Frage ƒernando. Wir fanden, dass es keine Möglichkeit gibt, es schneller zu machen. Was ich tue, mache es einfach in einem anderen Thread, wie du sagst. Natürlich verursacht dies viele UX-Probleme. Sie müssen es natürlich dann zwischenspeichern:/ – Fattie

+0

Beachten Sie, dass diese Bibliothek in einigen Fällen helfen kann https://github.com/malcommac/SwiftRichString assoziierten Artikel https://medium.com/breakfastcode/attributed-strings-in-swift -6d4b37db59a5 – Fattie

Antwort

0

reduziert ich keinen Weg finden, habe die Wandlungszeit zu reduzieren . Aber es gibt eine Möglichkeit, die Ladezeit zu "hacken".

Scheint, dass der Prozess der Konvertierung eine lange Zeit das erste Mal dauert, aber weniger in den nächsten Aufrufen dauert. Auf diese Weise löste ich das Problem, ein Stück "HTML-Spam" in meinem AppDelegate zu laden. So wird der Benutzer das langsame Laden während der Verwendung der Anwendung nicht bemerkt.

AppDelegate:

override func application(_ application: UIApplication, willFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool { 

    super.application(application, willFinishLaunchingWithOptions: launchOptions) 
    try! NSMutableAttributedString(
     data: "<a>asdasd</a>".data(using: String.Encoding.unicode, allowLossyConversion: true)!, 
     options: [ 
      NSDocumentTypeDocumentAttribute : NSHTMLTextDocumentType, 
      NSCharacterEncodingDocumentAttribute: String.Encoding.unicode.rawValue 
     ], 
     documentAttributes: nil) 

    return true 
} 

In den Viewcontrollers können Sie wie gewohnt anrufen:

var html = "<b>Whatever...</b>"  
var attributedText = try! NSMutableAttributedString(
    data: html.data(using: String.Encoding.unicode, allowLossyConversion: true)!, 
    options: [ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType], 
    documentAttributes: nil) 
+0

@Mehul Thakkar versuchen Sie es und sagen Sie mir;) –

+0

Ich versuchte dies, es minimiert etwas Zeit, aber nicht viel glatt noch –

0

Verwendung „String.Encoding.utf8“ statt „String.Encoding.unicode“ könnte dies Ihre Wandlungszeit

var html = "<bold>Wow!</bold> Now <em>iOS</em> can create <h3>NSAttributedString</h3> from HTMLs!" 

let attributedOptions: [String: Any] = [ 
        NSDocumentTypeDocumentAttribute : NSHTMLTextDocumentType, 
        NSCharacterEncodingDocumentAttribute: String.Encoding.utf8.rawValue 
       ] 

var attrString = try! NSAttributedString(data: html.data(using: String.Encoding.utf8)!, options: attributedOptions, documentAttributes: nil) 
YOUR_TEXT_VIEW.attributedText = attrString 
+3

hast du die Frage gelesen? –

+0

Ya ich las deine Frage. Sie stehen vor einer gewissen Verzögerung in der HTML-Konvertierung. Ich denke, es ist, weil Sie "String.Encoding.unicode" anstelle von "String.Encoding.utf8" verwenden. Thinnk wird es Ihre Konvertierung reduzieren –

+1

@MilapKundalia Wert darauf hinweisen, dass Unterschied in Ihrer Antwort dann, wenn Sie denken, dass das das Problem ist. – Larme