問題タブ [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への変更が画面に表示されない
Cocoaドキュメントのテキストシステムの概要の「手作業によるテキストシステムの組み立て」セクションに沿って、自分で作成したテキストシステムに裏打ちされたNSTextViewがあります。NSTextStorageの内容が画面に正常に表示されます。
しかし、入力しても何も起こらないようです。画面上のテキストは変わりません。テキストを選択すると、選択範囲の形からテキストが変更されたことがわかります。テキストをコピーしてテキストエディットに貼り付けると、編集内容も表示されます。そして、十分に入力すると、例外をスローすることができます。
ゴリー、これは私が一日の大部分をデバッグに費やすことができるようなもののように見えます。何が起きてる?
objective-c - NSTextStorageを使用してNSTextViewを構成するにはどうすればよいですか?
NSTextViewの情報をNSTextStorageにどのように保存しますか?
cocoa - NSTextStorage を使用したテキストの描画
NSTextStorage、NSTextContainer、NSLayoutManager の 3 つのクラスを使用して画面にテキストを描画しています。nstextstorage の一部に特別な属性 (下線、色など) を持たせたいのですが、うまくいきません。コードは次のとおりです。
問題は、この例外が発生することです: NSConcreteNotifyingMutableAttributedString addAttribute:value:range:: nil value
手伝って頂けますか?
前もって感謝します。
編集:メソッド呼び出しを修正して例外を解決しました。ただし、属性は表示されません。
objective-c - NSTextStorageを拡張する方法は?
ドキュメントによると、NSTextStorageをサブクラス化して、テキストビューで使用しようとしています。
そこで、デリゲートを使用して、同じ機能で必要なすべてのイベントを処理しようとします。
デリゲートとして何を使用しているかは関係ありません:NSTextStorageまたはNSMutableAttributedString、結果は同じです:
キャッチされない例外が発生 しました*NSRunStorage、_NSBlockNumberForIndex():配列の境界を超えるインデックス(18446744073709551615)*キャッチされない例外によるアプリの終了'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に変換できません」でクラッシュします。
ただし、これはアプリの2回目の起動ごとにのみ発生します(3回目の起動はクラッシュせず、前回開いたときにクラッシュしたドキュメントを自動的に再度開きます)。また、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 -- 前のページに戻りますか?
本のレイアウトに2 つあるNSTextfields
のですが、前の「ページ」にすばやく戻る方法がわかりません。本のサイズ、フォント サイズ、行サイズはすべて変更されるため、前のページのテキストの文字列はその場で計算する必要があります。写真:
NSTextfields にはそれぞれ 1 つNSTextContainer
の があり、 と を共有しNSLayoutManager
ますNSTextStorage
。
先に進むのは簡単です。表示されているテキストの文字範囲を取得し、次の文字から始まる部分文字列を作成します。
私の戻る方法はクラッジです。一度に表示できる最大文字数を計算します。次に、その長さの文字列を作成し、最後の文字を本の右下隅に配置します。次に、ループします。最初から文字を削除し、必要な文字が右下に表示されるまで、毎回何が表示されるかを確認します。これは非常に遅いです。
私が達成したいことを行うためのより速い方法を誰かが提案できますか? を使用することを考えていましたが、このレイアウトscrollRangeToVisible
に を設定する方法がわかりませんでした。NSScrollView
誰でも助けることができますか?
Textcontainers は次のように設定されます。
私のひどい逆行コードを投稿する意味はありませんが、毎回何が表示されるかを把握するために見つけたこの方法を使用しています。
macos - NSTextView: いつ自動的に文字を挿入するか (括弧の自動一致など)?
がありNSTextView
、そのNSTextStorage
デリゲートとして機能しているため、 と のコールバックを取得textStorageWillProcessEditing:
していますtextStorageDidProcessEditing:
。現在、コールバックを使用しdid
てテキストの属性を変更しています (特定の単語に色を付けています)。
私がやりたいのは、特定の文字ペアの自動一致を追加することです。ユーザーが(
を入力すると、私も a を挿入したいのです)
が、いつ、どこでこれを行うのが適切なのか正確にはわかりません。
テキスト ストレージ デリゲート プロトコルから、このwill
メソッドを使用すると、表示されるテキストを変更できるようになると書かれていますが、それが何を意味するのか、どのようにそれを行うことができるのかはよくわかりません。テキスト システムは非常に大きく、混乱を招きます。
どうすればいいですか?