1

InputMethodKitを使用して迅速な入力方法 (IM) を作成しています。IM は基本的に機能します。Konsole でキーストロークを取得しinputText()、ログ メッセージを確認します。

今、私はcomposedString(_ sender: Any!)このように迅速に実装します:

override func composedString(_ sender: Any!) -> Any! {
  let ret = NSMutableString().append("test")
  return ret
}

composedString(_ sender: Any!)を呼び出すと、 がシステムによって呼び出されることを理解していますupdateComposition()。これは実際に当てはまりますが、composedString(_ sender: Any!)クラッシュして出力が表示されます。

Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0   libswiftCore.dylib              0x00007fff2ccbd680 swift_unknownObjectRetain + 32
1   com.IBNSoft.inputmethod.MyApp   0x000000010c08c491 @objc InputController.composedString(_:) + 33
2   com.apple.InputMethodKit        0x00007fff4670358d -[IMKInputController updateComposition] + 45
3   com.IBNSoft.inputmethod.MyApp   0x000000010c08a5bf closure #1 in InputController.inputText(_:client:) + 703 (InputController.swift:25)
4   com.IBNSoft.inputmethod.MyApp   0x000000010c086740 thunk for @escaping @callee_guaranteed () -> () + 48
5   libdispatch.dylib               0x00007fff20441603 _dispatch_call_block_and_release + 12
6   libdispatch.dylib               0x00007fff204427e6 _dispatch_client_callout + 8
7   libdispatch.dylib               0x00007fff2044eb2f _dispatch_main_queue_callback_4CF + 940
8   com.apple.CoreFoundation        0x00007fff207226f8 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 9
9   com.apple.CoreFoundation        0x00007fff206e48e2 __CFRunLoopRun + 2755
10  com.apple.CoreFoundation        0x00007fff206e375c CFRunLoopRunSpecific + 563
11  com.apple.HIToolbox             0x00007fff28905203 RunCurrentEventLoopInMode + 292
12  com.apple.HIToolbox             0x00007fff28904f65 ReceiveNextEventCommon + 587
13  com.apple.HIToolbox             0x00007fff28904d03 _BlockUntilNextEventMatchingListInModeWithFilter + 70
14  com.apple.AppKit                0x00007fff22edfb32 _DPSNextEvent + 864
15  com.apple.AppKit                0x00007fff22ede305 -[NSApplication(NSEvent) _nextEventMatchingEventMask:untilDate:inMode:dequeue:] + 1364
16  com.apple.AppKit                0x00007fff22ed0679 -[NSApplication run] + 586
17  com.apple.AppKit                0x00007fff22ea485c NSApplicationMain + 816
18  com.IBNSoft.inputmethod.MyApp   0x000000010c08935d main + 13 (AppDelegate.swift:19)
19  libdyld.dylib                   0x00007fff20607f3d start + 1

Appleのドキュメントは次のように述べていcomposedString(_:)ます:

戻り値:

NSString または NSAttributedString オブジェクトである、現在構成されている文字列。返されるオブジェクトは、自動解放されたオブジェクトである必要があります。

NSMutableString問題は、 「自動解放と保持」に関して正しく割り当てていないことだと思います。そのクラッシュの問題がそれを解決する方法であることを誰かが明らかにすることができますか.

ありがとう

4

0 に答える 0