フィールドに入力された文字を大文字にすることだけを目的とするいくつかの NSTextFields にカスタム NSFormatter を接続しています。私のフォーマッタのコード全体を以下に示します。
stringForObjectValue()
とのgetObjectValue()
実装はノーオペレーションであり、Apple のドキュメントからほぼそのまま引用されています。メソッドを使用してisPartialStringValid()
、文字列の大文字バージョンを返しています。このコードは、10.4 および 10.5 で正しく機能します。10.6 で実行すると、テキスト フィールドが常に入力された文字をレンダリングするとは限らず、ゴミを表示するだけの「奇妙な」動作が発生します。NSZombie 検出を有効にして Instruments で実行しようとしましたが、何も報告されませんでした。「コンソール」に次のようなエラーが表示されます。
HIToolbox: ignoring exception '*** -[NSCFString replaceCharactersInRange:withString:]: Range or index out of bounds' that raised inside Carbon event dispatch
(
0 CoreFoundation 0x917ca58a __raiseError + 410
1 libobjc.A.dylib 0x94581f49 objc_exception_throw + 56
2 CoreFoundation 0x917ca2b8 +[NSException raise:format:arguments:] + 136
3 CoreFoundation 0x917ca22a +[NSException raise:format:] + 58
4 Foundation 0x9140f528 mutateError + 218
5 AppKit 0x9563803a -[NSCell textView:shouldChangeTextInRange:replacementString:] + 852
6 AppKit 0x95636cf1 -[NSTextView(NSSharing) shouldChangeTextInRanges:replacementStrings:] + 1276
7 AppKit 0x95635704 -[NSTextView insertText:replacementRange:] + 667
8 AppKit 0x956333bb -[NSTextInputContext handleTSMEvent:] + 2657
9 AppKit 0x95632949 _NSTSMEventHandler + 209
10 HIToolbox 0x93379129 _ZL23DispatchEventToHandlersP14EventTargetRecP14OpaqueEventRefP14HandlerCallRec + 1567
11 HIToolbox 0x933783f0 _ZL30SendEventToEventTargetInternalP14OpaqueEventRefP20OpaqueEventTargetRefP14HandlerCallRec + 411
12 HIToolbox 0x9339aa81 SendEventToEventTarget + 52
13 HIToolbox 0x933fc952 SendTSMEvent + 82
14 HIToolbox 0x933fc2cf SendUnicodeTextAEToUnicodeDoc + 700
15 HIToolbox 0x933fbed9 TSMKeyEvent + 998
16 HIToolbox 0x933ecede TSMProcessRawKeyEvent + 2515
17 AppKit 0x95632228 -[NSTextInputContext handleEvent:] + 1453
18 AppKit 0x9562e088 -[NSView interpretKeyEvents:] + 209
19 AppKit 0x95631b45 -[NSTextView keyDown:] + 751
20 AppKit 0x95563194 -[NSWindow sendEvent:] + 5757
21 AppKit 0x9547bceb -[NSApplication sendEvent:] + 6431
22 AppKit 0x9540f6fb -[NSApplication run] + 917
23 AppKit 0x95407735 NSApplicationMain + 574
24 macsetup 0x00001f9f main + 24
25 macsetup 0x00001b75 start + 53
)
何が起こっているのか、誰かが光を当てることができますか? NSFormatter を間違って使用しているだけですか?
-(NSString*) stringForObjectValue:(id)object {
if( ![object isKindOfClass: [ NSString class ] ] ) {
return nil;
}
return [ NSString stringWithString: object ];
}
-(BOOL)getObjectValue: (id*)object forString: string errorDescription:(NSString**)error {
if( object ) {
*object = [ NSString stringWithString: string ];
return YES;
}
return NO;
}
-(BOOL) isPartialStringValid: (NSString*) cStr newEditingString: (NSString**) nStr errorDescription: (NSString**) error {
*nStr = [NSString stringWithString: [cStr uppercaseString]];
return NO;
}