2016-12-07 5 views
1

Dans mon application, j'ai beaucoup de fichiers rtf que j'ai lu et mettre le texte dans un UITextView avec AttributedText.swift 3: Obtenir le texte au format rtf à partir de MySQL

Maintenant, je veux mettre tous ces fichiers dans une base de données MySQL et les lire avec un fichier PHP et URLSession.

import UIKit 

class ViewController: UIViewController, URLSessionDataDelegate { 

    var returnString = "" 
    var aOverskrifter:NSMutableArray = [] 
    var aLilleTekster:NSMutableArray = [] 
    var aLangTekster:NSMutableArray = [] 
    var styledText = NSMutableAttributedString() 


    @IBOutlet var txtWikiTekst: UITextView! 

    //** Button to get data from php file 
    @IBAction func btnHentWiki_Click(_ sender: UIButton) { 

     //** Læs fra nettet 
     let myURLString = "xxxx.php" 

     HentResponseString(url: myURLString) 

    } 

    //** Show rtf text in UITextView 
    @IBAction func btnVisData_Click(_ sender: UIButton) { 

     txtWikiTekst.attributedText = styledText 
    } 

    //** Function the gets the text from php page 
    func HentResponseString(url: String) { 

     let url = URL(string: url)! 
     let request = URLRequest(url: url) 


     let task = URLSession.shared.dataTask(with: request) { data, response, error in 
      guard let data = data else { 
       print("request failed \(error)") 
       return 
      } 

      let responseString = String(data: data, encoding: .utf8) 

      //** Bearbejd responseString 
      let lines = responseString?.components(separatedBy: "#") 

      for line in lines! { 

       let fields = line.components(separatedBy: "$") 

       var xcounter:Int = 0 

       for field in fields { 

        //** Overskrift 
        if xcounter == 0 { 
         self.aOverskrifter.add(field) 
        } 
        //** Lille tekst 
        if xcounter == 1 { 
         self.aLilleTekster.add(field) 
        } 
        //** Lang tekst 
        if xcounter == 2 { 
         self.aLangTekster.add(field) 
         styledText = field 
        } 

        xcounter+=1 
       } 
      }    
     } 
     task.resume() 

    } 



    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 


} 

Mais quand je lance ce code, je ne vois que le texte de rtf dans le UITextView et non le texte formaté.

Dans la base de données j'utilise UTF8 et dans le fichier PHP j'utilise UTF8, mais cela ne fonctionne pas correctement.

Est-ce que quelqu'un sait comment résoudre ce problème ou pouvez-vous me diriger dans la bonne direction?

+0

Pouvez-vous s'il vous plaît fournir le code complet? – nitinsh99

+0

Le code a été mis à jour maintenant. –

+0

Si je lis dans la base de données et crée un nouveau fichier dans le répertoire du document, je peux remplir le nouveau fichier avec le texte formaté. Mais je ne peux pas lire le contenu de ce nouveau fichier dans mon textview avec la bonne mise en forme. Si je copie un fichier rtf dans mon bundle je peux le lire sans aucun problème et il est montré correctement. Alors pourquoi ne puis-je pas faire la même chose avec un fichier dans le répertoire du document? –

Répondre

1

Une fois que vous avez le texte RTF, vous devez le convertir en objet Data et utiliser l'objet Data pour initialiser votre variable NSAttributedString. Pour le démontrer, j'ai créé un document RTF "Hello, world" dans TextEdit, avec "Hello" en texte rouge et "world" en bleu. Le code suivant, que vous pouvez exécuter dans un terrain de jeu, crée cette chaîne attribuée couleur à partir du contenu du fichier .rtf TextEdit enregistré:

let rtfText = "{\\rtf1\\ansi\\ansicpg1252\\cocoartf1504\\cocoasubrtf760\n{\\fonttbl\\f0\\fswiss\\fcharset0 Helvetica;}\n{\\colortbl;\\red255\\green255\\blue255;\\red255\\green0\\blue0;\\red0\\green0\\blue255;}\n{\\*\\expandedcolortbl;;\\csgenericrgb\\c100000\\c0\\c0;\\csgenericrgb\\c0\\c0\\c100000;}\n\\margl1440\\margr1440\\vieww12600\\viewh7800\\viewkind0\n\\pard\\tx720\\tx1440\\tx2160\\tx2880\\tx3600\\tx4320\\tx5040\\tx5760\\tx6480\\tx7200\\tx7920\\tx8640\\pardirnatural\\partightenfactor0\n\n\\f0\\fs24 \\cf2 Hello\\cf0 , \\cf3 world}" 

let rtfData = rtfText.data(using: .utf8)! 
let attributedString = try! NSAttributedString(data:rtfData, options: [:], documentAttributes: nil)