NSSpellChecker と NSApplication

January 8th, 2007

Mac OS X にはスペルチェッカがついている。

require 'osx/cocoa'

OSX::NSApplication.sharedApplication

checker = OSX::NSSpellChecker.sharedSpellChecker
p checker
puts checker.guessesForWord('helllo').to_a.collect{|s| s.to_s }.join(' ')

実行結果:

% ruby a.rb
#<OSX::NSSpellChecker:0x2c6014 class='NSSpellChecker' id=0x633670>
hello hell hell-lo

OSX::NSApplication.sharedApplication の行を外すと checker が nil になるという挙動がわりと BK なのでここに記録しておく。

なお Objective-C で書いても nil になるので、RubyCocoa は悪くないです。

#import <AppKit/AppKit.h>

int main(int argc, char* argv[])
{
    NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];

#if 0
    [NSApplication sharedApplication];
#endif
    NSSpellChecker* checker = [NSSpellChecker sharedSpellChecker];
    NSLog(@"%@", checker);
    NSLog(@"%@", [checker guessesForWord: @"helllo"]);

    [pool release];
}

実行結果:

% gcc a.m -framework AppKit && ./a.out
2007-01-08 19:31:27.155 a.out[2147] (null)
2007-01-08 19:31:27.157 a.out[2147] (null)