В моем приложении у меня есть много файлов RTF, которые я прочитал и поместил текст в UITextView
с AttributedText
,
Теперь я хочу поместить все эти файлы в базу данных MySQL и прочитать их с помощью файла PHP и 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.
}}
Но когда я запускаю этот код, я вижу только текст RTF в UITextView
а не форматированный текст.
В базе данных я использую UTF8 и в файле PHP я использую UTF8, но он не работает правильно.
Кто-нибудь знает, как это исправить, или вы можете указать мне правильное направление.
Если у вас есть текст RTF, вы должны преобразовать его в Data
объект и использовать Data
объект для инициализации вашего NSAttributedString
переменная. Чтобы продемонстрировать это, я создал RTF-документ «Hello, world» в TextEdit, с «Hello» красным текстом и «world» синим. Следующий код, который вы можете запустить на игровой площадке, создает эту цветную атрибутивную строку из содержимого сохраненного файла TextEdit .rtf:
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)
Других решений пока нет …