问题标签 [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.

0 投票
1 回答
206 浏览

cocoa - 对 NSTextView 的更改未到达屏幕

我有一个由我自己组装的文本系统支持的 NSTextView,按照 Cocoa 文档中文本系统概述中的“手动组装文本系统”部分的内容。它成功地在屏幕上显示了 NSTextStorage 的内容。

但是当我输入它时,似乎什么也没有发生——屏幕上的文字没有改变。如果我选择文本,则选择的形状表明文本已更改。如果我将文本复制并粘贴到 TextEdit 中,我什至可以看到我的编辑。如果我输入足够多,我可以让它抛出异常:

天哪,这看起来像是我可以花大半天时间调试的东西。这里发生了什么?

0 投票
2 回答
1088 浏览

objective-c - 如何使用 NSTextStorage 配置 NSTextView?

如何使用 NSTextStorage 存储 NSTextView 的信息?

0 投票
1 回答
878 浏览

cocoa - 使用 NSTextStorage 绘制文本

我正在使用三个类将文本绘制到屏幕上:NSTextStorage、NSTextContainer、NSLayoutManager。我希望 nstextstorage 的一部分具有一些特殊属性(下划线、颜色...),但它不起作用。这是代码:

问题是它引发了这个异常: NSConcreteNotifyingMutableAttributedString addAttribute:value:range:: nil value

你能帮助我吗?

提前致谢。

编辑:我通过更正方法调用解决了异常。但是属性不显示。

0 投票
2 回答
2208 浏览

objective-c - 如何扩展 NSTextStorage?

根据文档,我尝试继承 NSTextStorage 并在文本视图中使用它:

所以我尝试使用委托来处理具有相同功能的所有需要​​的事件:

无论我使用什么作为委托:NSTextStorage 或 NSMutableAttributedString,结果都是一样的:

引发了未捕获的异常 * NSRunStorage,_NSBlockNumberForIndex():索引 (18446744073709551615) 超出数组边界 (0) *由于未捕获的异常 'NSRangeException' 导致应用程序终止,原因:'*** NSRunStorage,_NSBlockNumberForIndex():索引 (18446744073709551615) 超出数组边界 (0)'

堆栈跟踪:

当我尝试打电话时终止开始

但在标准 NSTextStorage 版本中,一切正常。

我需要做什么来扩展这个类?

0 投票
3 回答
713 浏览

objective-c - 如何观察 NSTextStorage 的变化

我有一个NSTextStorage代表正在执行textStorageDidProcessEditing:. 不幸的是,其中userInfo不包含有关文本更改的任何详细信息。

我怎样才能知道实际发生了什么变化?

理想情况下,我想知道发送到的所有内容[NSLayoutManager textStorage:edited:range:changeInLength:invalidatedRange:],但仅编辑范围就足够了。

0 投票
3 回答
1001 浏览

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

0 投票
1 回答
549 浏览

macos - textView:shouldChangeTextInRanges:replacementStrings: 编辑 NSTextStorage 时方法崩溃

我是 OSX Lion 下 Cocoa 编程的新手,所以这是一个我找不到答案的问题。我需要修改用户通过NSTextView. 编辑可能包括替换字符串中的某些部分NSTextStorage以及添加NSTextAttachment对象。我实现了协议并将其NSTextView作为委托提供。我还以以下方式实现了该方法textView:shouldChangeTextInRanges:replacementStrings:

因此我尝试了下一个场景:当应用程序启动时,用户在NSTextView一些文本中键入。如果他输入“(。”一切顺利。但是当他输入“-+”(减号、加号、空格)时,该方法崩溃并产生此转储:

似乎缩短的字符串会导致一些越界溢出。

我做错了什么,我该如何解决这个问题?请帮忙。

0 投票
1 回答
279 浏览

objective-c - 书籍布局 NSTextFields——返回页面?

我有NSTextfields一本书的布局有两个,我想不出一种快速返回上一个“页面”的方法。书本大小、字体大小、行大小都会发生变化,因此必须即时计算前一页的文本字符串。图片:

例子

NSTextfields 每个都有一个NSTextContainer,它们共享一个NSLayoutManagerNSTextStorage

前进很容易:我获取可见文本的字符范围,然后从下一个字符开始创建一个子字符串。

我回去的方法是一个杂耍。我计算出一次可以看到的最大字符数。然后,我制作了一个该长度的字符串,最后一个字符是我想要的位于书的右下角的那个。然后我循环:从头开始删除字符,每次检查可见的内容,直到我想要的字符位于右下角。这是非常非常缓慢的。

谁能建议一种更快的方法来完成我想要实现的目标?我曾想过使用,但我不知道如何为此布局scrollRangeToVisible设置 a 。NSScrollView

任何人都可以帮忙吗?

文本容器的设置如下:

发布我糟糕的倒退代码是没有意义的,但我正在使用我发现的这种方法来找出每次可见的内容:

0 投票
1 回答
495 浏览

macos - NSTextView:何时自动插入字符(如自动匹配括号)?

我有一个NSTextViewand 我正在充当它的NSTextStorage代表,所以我正在获取textStorageWillProcessEditing:and的回调textStorageDidProcessEditing:,目前我正在使用did回调来更改文本上的一些属性(为某些单词着色)。

我想做的是添加某些字符对的自动匹配。当用户键入(时,我也想插入 a)但我不确定何时何地是执行此操作的适当时间。

从文本存储委托协议中,它说该will方法允许您更改要显示的文本..但我不确定这意味着什么或如何做到这一点。文本系统真的很大而且很混乱。

我该怎么做?

0 投票
1 回答
1856 浏览

objective-c - 将 NSTextView 格式的文本转换为 NSData(并返回)

我应该如何将 a 的内容转换NSTextViewNSData,然后在 Mac OS X 上将其转换回来并显示?

我可以使用textView.textStorage.string(其中 textView 是NSTextView对象)转换文本而不进行格式化。但是,我也想保存文本格式。

事实上,我已经实施了一种可行的方法,但我不确定它是否能保证始终有效。我对对象本身进行编码NSTextStorage并编写它,然后将其作为NSAttributedString. (NSTextStorage是 的子类NSAttributedString。)我这样做是因为我不能直接textStorage为设置NSTextView,但我可以设置其属性字符串。

这是我的转换代码(结果在 中data):

读回来:

并显示它:

考虑到我对一个NSTextStorage对象进行编码并将其读回并将其解释为NSAttributedString?