问题标签 [nstextstorage]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
cocoa - 对 NSTextView 的更改未到达屏幕
我有一个由我自己组装的文本系统支持的 NSTextView,按照 Cocoa 文档中文本系统概述中的“手动组装文本系统”部分的内容。它成功地在屏幕上显示了 NSTextStorage 的内容。
但是当我输入它时,似乎什么也没有发生——屏幕上的文字没有改变。如果我选择文本,则选择的形状表明文本已更改。如果我将文本复制并粘贴到 TextEdit 中,我什至可以看到我的编辑。如果我输入足够多,我可以让它抛出异常:
天哪,这看起来像是我可以花大半天时间调试的东西。这里发生了什么?
objective-c - 如何使用 NSTextStorage 配置 NSTextView?
如何使用 NSTextStorage 存储 NSTextView 的信息?
cocoa - 使用 NSTextStorage 绘制文本
我正在使用三个类将文本绘制到屏幕上:NSTextStorage、NSTextContainer、NSLayoutManager。我希望 nstextstorage 的一部分具有一些特殊属性(下划线、颜色...),但它不起作用。这是代码:
问题是它引发了这个异常: NSConcreteNotifyingMutableAttributedString addAttribute:value:range:: nil value
你能帮助我吗?
提前致谢。
编辑:我通过更正方法调用解决了异常。但是属性不显示。
objective-c - 如何扩展 NSTextStorage?
根据文档,我尝试继承 NSTextStorage 并在文本视图中使用它:
所以我尝试使用委托来处理具有相同功能的所有需要的事件:
无论我使用什么作为委托:NSTextStorage 或 NSMutableAttributedString,结果都是一样的:
引发了未捕获的异常 * NSRunStorage,_NSBlockNumberForIndex():索引 (18446744073709551615) 超出数组边界 (0) *由于未捕获的异常 'NSRangeException' 导致应用程序终止,原因:'*** NSRunStorage,_NSBlockNumberForIndex():索引 (18446744073709551615) 超出数组边界 (0)'
堆栈跟踪:
当我尝试打电话时终止开始
但在标准 NSTextStorage 版本中,一切正常。
我需要做什么来扩展这个类?
objective-c - 如何观察 NSTextStorage 的变化
我有一个NSTextStorage
代表正在执行textStorageDidProcessEditing:
. 不幸的是,其中userInfo
不包含有关文本更改的任何详细信息。
我怎样才能知道实际发生了什么变化?
理想情况下,我想知道发送到的所有内容[NSLayoutManager textStorage:edited:range:changeInLength:invalidatedRange:]
,但仅编辑范围就足够了。
objective-c - NSTextStorage 中令人困惑的编码异常
我有一个简单文本编辑器的 NSDocument 子类(使用 Lion 的新基于文档的应用程序模板,几乎没有自定义),我遇到了一个奇怪的错误,将文件内容加载到文本存储中。
这是我的代码:
当我:
- 在 Xcode 中运行应用程序(作为调试版本)
- 打开任何文件
- 退出应用程序(不关闭文档)
- 从 Xcode 再次运行应用程序
它-replaceCharactersInRange:withString:
因“无法将字符串 0x10004d430 中的字节转换为 _NSCStringEncoding”而崩溃。
但它只会在应用程序的第二次启动时发生(第三次启动不会崩溃,它会自动重新打开它在尝试打开前一次时崩溃的文档)。它也只发生在我从 Xcode 运行应用程序时。发布版本从未在发布时崩溃。
我认为这可能是自动保存系统的编码问题,但是当我注释掉该代码并将@“hello world”字符串加载到文本视图中时它甚至崩溃(如上面的代码所示)。同样,注释掉的NSLog()
并没有显示任何奇怪的东西。文本存储有效(从xib文件加载),文本存储长度为0,textContent为正在打开的文件的内容。
- - 编辑 - -
我了解到这个问题在某种程度上与com.apple.security.app-sandbox
权利有关。如果启用了权利/沙箱,那么我的应用程序不会崩溃。如果权利或应用程序沙盒功能被禁用,那么我的应用程序在每次启动尝试恢复以前打开的文档时都会崩溃。
我只注意到它在从 xcode 内部进行构建/运行时崩溃,因为这是我唯一禁用沙箱的构建配置。
- - /编辑 - -
有没有人有任何想法?完整的异常如下,完整的源代码在github上:https ://github.com/abhibeckert/Dux/blob/master/Dux/DuxTextView.m
macos - textView:shouldChangeTextInRanges:replacementStrings: 编辑 NSTextStorage 时方法崩溃
我是 OSX Lion 下 Cocoa 编程的新手,所以这是一个我找不到答案的问题。我需要修改用户通过NSTextView
. 编辑可能包括替换字符串中的某些部分NSTextStorage
以及添加NSTextAttachment
对象。我实现了协议并将其NSTextView
作为委托提供。我还以以下方式实现了该方法textView:shouldChangeTextInRanges:replacementStrings:
:
因此我尝试了下一个场景:当应用程序启动时,用户在NSTextView
一些文本中键入。如果他输入“(。”一切顺利。但是当他输入“-+”(减号、加号、空格)时,该方法崩溃并产生此转储:
似乎缩短的字符串会导致一些越界溢出。
我做错了什么,我该如何解决这个问题?请帮忙。
objective-c - 书籍布局 NSTextFields——返回页面?
我有NSTextfields
一本书的布局有两个,我想不出一种快速返回上一个“页面”的方法。书本大小、字体大小、行大小都会发生变化,因此必须即时计算前一页的文本字符串。图片:
NSTextfields 每个都有一个NSTextContainer
,它们共享一个NSLayoutManager
和NSTextStorage
。
前进很容易:我获取可见文本的字符范围,然后从下一个字符开始创建一个子字符串。
我回去的方法是一个杂耍。我计算出一次可以看到的最大字符数。然后,我制作了一个该长度的字符串,最后一个字符是我想要的位于书的右下角的那个。然后我循环:从头开始删除字符,每次检查可见的内容,直到我想要的字符位于右下角。这是非常非常缓慢的。
谁能建议一种更快的方法来完成我想要实现的目标?我曾想过使用,但我不知道如何为此布局scrollRangeToVisible
设置 a 。NSScrollView
任何人都可以帮忙吗?
文本容器的设置如下:
发布我糟糕的倒退代码是没有意义的,但我正在使用我发现的这种方法来找出每次可见的内容:
macos - NSTextView:何时自动插入字符(如自动匹配括号)?
我有一个NSTextView
and 我正在充当它的NSTextStorage
代表,所以我正在获取textStorageWillProcessEditing:
and的回调textStorageDidProcessEditing:
,目前我正在使用did
回调来更改文本上的一些属性(为某些单词着色)。
我想做的是添加某些字符对的自动匹配。当用户键入(
时,我也想插入 a)
但我不确定何时何地是执行此操作的适当时间。
从文本存储委托协议中,它说该will
方法允许您更改要显示的文本..但我不确定这意味着什么或如何做到这一点。文本系统真的很大而且很混乱。
我该怎么做?
objective-c - 将 NSTextView 格式的文本转换为 NSData(并返回)
我应该如何将 a 的内容转换NSTextView
为NSData
,然后在 Mac OS X 上将其转换回来并显示?
我可以使用textView.textStorage.string
(其中 textView 是NSTextView
对象)转换文本而不进行格式化。但是,我也想保存文本格式。
事实上,我已经实施了一种可行的方法,但我不确定它是否能保证始终有效。我对对象本身进行编码NSTextStorage
并编写它,然后将其作为NSAttributedString
. (NSTextStorage
是 的子类NSAttributedString
。)我这样做是因为我不能直接textStorage
为设置NSTextView
,但我可以设置其属性字符串。
这是我的转换代码(结果在 中data
):
读回来:
并显示它:
考虑到我对一个NSTextStorage
对象进行编码并将其读回并将其解释为NSAttributedString
?