Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift中的NSTextStorage子类';更新UITextView_Ios_Objective C_Cocoa_Cocoa Touch_Swift - Fatal编程技术网

Ios Swift中的NSTextStorage子类';更新UITextView

Ios Swift中的NSTextStorage子类';更新UITextView,ios,objective-c,cocoa,cocoa-touch,swift,Ios,Objective C,Cocoa,Cocoa Touch,Swift,我试图在Swift中创建一个简单的NSTextStorage子类,但当我在textView中键入时,没有显示任何文本 这是我在视图控制器中的设置代码 var textView: UITextView! var textStorage: CustomTextStorage? override func viewDidLoad() { super.viewDidLoad() textStorage = CustomTextStorage() let layoutMan

我试图在Swift中创建一个简单的NSTextStorage子类,但当我在textView中键入时,没有显示任何文本

这是我在视图控制器中的设置代码

var textView: UITextView!

var textStorage: CustomTextStorage?

override func viewDidLoad() {
    super.viewDidLoad()

    textStorage = CustomTextStorage()

    let layoutManager = NSLayoutManager()
    textStorage!.addLayoutManager(layoutManager)

    let textContainer = NSTextContainer(size: view.bounds.size)
    layoutManager.addTextContainer(textContainer)

    textView = UITextView(frame: view.bounds, textContainer: textContainer)
    view.addSubview(textView)
}
在my
CustomTextStorage
子类中:

var store: NSMutableAttributedString = NSMutableAttributedString()

func string() -> NSString {
    return store.string
}

override func attributesAtIndex(location: Int, effectiveRange range: NSRangePointer) -> [NSObject : AnyObject] {
    return store.attributesAtIndex(location, effectiveRange: range)
}

override func replaceCharactersInRange(range: NSRange, withString str: String) {
    store.replaceCharactersInRange(range, withString: string)
    edited(NSTextStorageEditActions.EditedCharacters, range: range, changeInLength:countElements(str) - range.length)
}

override func setAttributes(attrs: [NSObject : AnyObject]?, range: NSRange) {
    store.setAttributes(attrs, range: range)
    edited(NSTextStorageEditActions.EditedAttributes, range: range, changeInLength: 0)
}
问题:每次我在文本视图中键入时,
replaceCharactersRange:withString:
会被正确的
字符串调用,但是
范围
为{0,0},文本视图中不会出现任何内容。不过,键盘上方的建议栏确实发生了变化

另一方面,
setAttributes:
被调用的范围为{0,1}(正确的值),导致异常:

nsmutablerearray replaceObjectsRange:withObject:length::Out-bounds'

我通过首先检查范围是否在边界内避免了这种情况,但这并不能解决第一个问题


任何帮助都会很棒

看起来我在
CustomTextStorage.swift
中展示了以下内容:

override func processEditing() {
}
需要在该方法中调用
super.processEditing()
。哎呀

我在其他网站和邮件列表上看到了一些类似的问题,但没有得到答案