- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
为了破解another problem分成更小的部分,我正在尝试设置所有 TextKit 组件。但是,在更改初始化 NSTextStorage
的方式后,我遇到了崩溃。出于测试目的,我已将项目简化为以下内容:
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))
})
}
}
它在 enumerateLineFragmentsForGlyphRange
处崩溃,异常代码为 EXC_I386_GPFLT .该代码不是很解释。基本问题似乎归结为我如何初始化 NSTextStorage
。
如果我更换
let textStorage = NSTextStorage(string: "This is a test")
layoutManager.textStorage = textStorage
有了这个
layoutManager.textStorage = textView.textStorage
然后就可以了。我做错了什么?
最佳答案
看起来做事的方式是将 NSLayoutManager 添加到 NSTextStorage 对象,(使用 addLayoutManager:) 而不是在布局管理器上设置 textStorage 属性。
来自 Apple 的文档:
This method is invoked automatically when you add an NSLayoutManager to an NSTextStorage object; you should never need to invoke it directly, but you might want to override it. If you want to replace the NSTextStorage object for an established group of text-system objects containing the receiver, use replaceTextStorage:.
Link to setTextStorage: for NSLayoutManager
大概是在“addLayoutManager:”中完成了一些在 setTextStorage 中没有完成的事情,导致了崩溃。
您可能还想增加 textStorage 变量的范围,如果它看起来在 viewDidLoad 完成后被清除。
关于ios - 如何在 Swift 中使用字符串初始化 NSTextStorage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30796174/
我目前正在 iOS 上开发自定义 NSTextStorage,我需要检测一些主题标签 (#)、提及和 url...此时一切正常,但如果用户尝试从键盘输入表情符号字符不显示,因为我使用的是 Helvet
每个示例都将 NSMutableAttributedString 显示为“后备存储”,用于保存与查看/编辑文本相关的文本和属性。我如何使用替代品,例如 std::string 或数据库中的内容。作为测
我有一个 NSTextStorage 的子类,它给我带来了一些问题。每次我执行以下操作时都会崩溃: 在第一行输入一些文字 按返回移动到下一行 至少输入两个字符 点击退格键 我遇到的错误是Termati
我正在构建一个自定义 NSTextStorage 类来查找和匹配自定义用户输入并在我的应用程序中处理它。所以我遵循了几个教程,最著名的是 objc.io's ,并创建了一个子类并将其 layoutMa
我正在子类化 NSTextStorage 来做一些链接突出显示,我已经阅读了 I can on the topic .一切正常,直到我输入 🏒 表情符号字符。 我的子类: private let i
我有一个 NSTextView 子类作为其 NSTextStorage 委托(delegate)。我正在尝试做两件事: 以某种方式突出显示文本 评估文本,然后将答案附加到 TextView 。 我使用
我正在为 iOS/osx 编写语法 Markdown 。 它是 NSTextStorage 的子类。它在 iOS 中运行良好,但在 OSX 中(将代码 UIColor 转换为 NSColor 并将 U
我有一个 NSTextStorage里面有长文本(比如一本书有 500 页,当前字体在设备上超过 9000 页)。我以这种方式为 textcontainer 分发此文本: let textStorag
我有一个 UITextView,它应该接收从 HTML 收缩的 NSAttributesString。最终结果是带有自定义链接下划线的黑色文本。我快崩溃了。 Terminating app due t
我有一个自定义的 UITextView,它通过定义一个自定义的 NSTextStorage 类来利用 Apple 的 TextKit,但是,当我将我的子类用于自定义 TextView 的文本存储时(如
我正在尝试 iOS 的文本解析器。我有一些粗体、斜体、突出显示等语法。我在 UITextView 中使用 NSTextStorage 实例对其进行了设置,以监视更改并设置正确的属性。如果我用文本预加载
根据文档,我尝试继承 NSTextStorage 并在 TextView 中使用它: /* NSTextStorage is a semi-abstract subclass of NSMutabl
对于 NSTextStorage 对象,我想将其设置为具有来自第三方库的 malloc 存储。 (存储的特殊之处在于它是不可交换的,并且不能被复制。)我能发现的唯一可能的方法可能是 allocWith
我有一个 NSTextStorage 委托(delegate)实现 textStorageDidProcessEditing:。不幸的是,userInfo 不包含有关文本更改的任何详细信息。 如何找出
我尝试将此行移植到 xamarin let textStorage = NSTextStorage(attributedString: self.attributedText!) 但我找不到采用 NS
我尝试将此行移植到 xamarin let textStorage = NSTextStorage(attributedString: self.attributedText!) 但我找不到采用 NS
我正在编写一个使用 UITextView 处理富文本编辑的应用程序。它使用 NSTextStorage 为部分字符串设置新属性。然而,如果用户想要在字符串末尾或字符串中间更改字体或字体大小(换句话说,
为了破解another problem分成更小的部分,我正在尝试设置所有 TextKit 组件。但是,在更改初始化 NSTextStorage 的方式后,我遇到了崩溃。出于测试目的,我已将项目简化为以
我有一个用于简单文本编辑器的 NSDocument 子类(使用 Lion 基于文档的新应用程序模板,几乎没有自定义),我遇到了一个奇怪的错误,将文件内容加载到文本存储中。 这是我的代码: - (voi
如何使用 NSTextStorage 存储 NSTextView 的信息? 最佳答案 参见Assembling the Text System by Hand在 Cocoa Text Architec
我是一名优秀的程序员,十分优秀!