Per interrompere another problem in parti più piccole, sto cercando di impostare tutti i componenti di TextKit. Tuttavia, si verifica un arresto anomalo dopo aver modificato la modalità di inizializzazione di NSTextStorage
. A scopo di verifica Ho semplificato il progetto al seguente:Come inizializzare NSTextStorage con una stringa in Swift
import UIKit
class ViewController3: UIViewController {
@IBOutlet weak var textView: UITextView!
@IBOutlet weak var myTextView: MyTextView!
override func viewDidLoad() {
super.viewDidLoad()
let container = NSTextContainer(size: myTextView.bounds.size)
let layoutManager = NSLayoutManager()
let textStorage = NSTextStorage(string: "This is a test")
layoutManager.addTextContainer(container)
//layoutManager.textStorage = textView.textStorage // This works
layoutManager.textStorage = textStorage // This doesn't work
myTextView.layoutManager = layoutManager
}
}
class MyTextView: UIView {
var layoutManager: NSLayoutManager?
override func drawRect(rect: CGRect) {
let context = UIGraphicsGetCurrentContext();
// Enumerate all the line fragments in the text
layoutManager?.enumerateLineFragmentsForGlyphRange(NSMakeRange(0, layoutManager!.numberOfGlyphs), usingBlock: {
(lineRect: CGRect, usedRect: CGRect, textContainer: NSTextContainer!, glyphRange: NSRange, stop: UnsafeMutablePointer<ObjCBool>) -> Void in
// Draw the line fragment
self.layoutManager?.drawGlyphsForGlyphRange(glyphRange, atPoint: CGPointMake(0, 0))
})
}
}
Si blocca in enumerateLineFragmentsForGlyphRange
con un codice di eccezione di EXC_I386_GPFLT. Quel codice non è molto esplicativo. Il problema di base sembra essere il modo in cui sto inizializzando NSTextStorage
.
Se sostituisco
let textStorage = NSTextStorage(string: "This is a test")
layoutManager.textStorage = textStorage
con questo
layoutManager.textStorage = textView.textStorage
allora funziona. Che cosa sto facendo di sbagliato?
let testo: NSTextStorage = NSTextStorage (stringa: "test") – Arvind
@Arvind, Ancora lo stesso errore ... – Suragch
Dall'analisi dei doucments, penso che dovresti provare ad aggiungere il gestore di layout all'archivio di testo piuttosto che viceversa. –