2017-02-03 4 views
1

Ich habe ein Array von AttributedString mit X-Elementen und eine tableView, die dieses Array anzeigen, und für jedes Element im Array wird es einen Abschnitt in der Tabelle sein. In der "CellForRowAt" -Funktion, wenn ich "let text = arrayTexts [indexPath.section] [indexPath.row]", der Fehler 'Typ NSAttributedString hat keine tiefgestellten Mitglieder' erscheint. Was kann ich tun?Typ NSAttributedString hat keine tiefgestellten Mitglieder in tableView

Erklärung: var arrayTexts = [NSAttributedString]()

Populate:

let html = json["data"][order]["informations"][textIndex]["text"].stringValue 
          let textHtml = html.unescapingFromHTML 


          do { 
           let str = try NSMutableAttributedString(data: textHtml.data(using: String.Encoding.unicode, allowLossyConversion: true)!, options: [NSDocumentTypeDocumentAttribute : NSHTMLTextDocumentType], documentAttributes: nil) 
           let fullRange : NSRange = NSMakeRange(0, str.length) 
           str.addAttributes([NSFontAttributeName: UIFont(name: "Helvetica Neue", size: 17.0)!], range: fullRange) 

           self.arrayTexts.append(str) 
           self.tableView.reloadData() 
          } catch { 
           print(error) 
          } 
+2

Zeigen Sie, wie Sie 'arrayTexts' deklarieren und auffüllen. – rmaddy

+0

Deklaration: var arrayTexts = [NSAttributedString](). Jedes Element ist eine Zeichenfolge, die aus einer Datenbank kommt, und ich verwende "try NSMutableAttributedString (data:, options:, documentAttributes:)", um es in attributedString umzuwandeln und in arrayTexts anzuhängen. –

+0

Ihre Syntax setzt ein Array (Zeile) in einem Array voraus (Abschnitt) '[[]]'. – vadian

Antwort

1

Das Problem ist, dass Ihre let text = arrayTexts[indexPath.section][indexPath.row] funktioniert nur, wenn Sie ein Array von Arrays von NSAttributedStrings ([[NSAttributedString]]) haben. So wird arrayTexts[indexPath.section] einen einzelnen NSAtributedString zurückgeben, so dass der Versuch, mit [indexPath.row] zu indizieren, fehlschlägt. Es ist schwer zu verstehen, was genau du tun willst, ohne mehr Code zu sehen, aber aus deiner Beschreibung klingt es so, als könntest du den Code einfach auf ändern und es wird dir geben, was du willst.

+0

Alter, es hat perfekt funktioniert! Vielen Dank! : D –

1

Sie müssen die Datenquelle Array

var arrayTexts = [[NSAttributedString]]() 

und bevölkern das Array

self.arrayTexts.append([str]) 

erklären, dass Erstellt einen Abschnitt für jeden Artikel.

+0

Vielen Dank für die Hilfe! Ich habe die andere Antwort verwendet, die ich bekommen habe, aber mit deiner Antwort habe ich gelernt, bessere Arrays in Zellen zu verwenden. Ich danke dir sehr! –

Verwandte Themen