如何在Objective-C中读取键盘输入

如何在Objective-C中读取键盘输入,objective-c,textinput,Objective C,Textinput,您好,我正在制作一个从键盘获取输入的程序,我想知道是否有任何方法可以从键盘获取输入并将其存储在NSString对象中。如果您是作为命令行应用程序执行此操作,那么下面是我上周编写的代码,用于从命令提示符获取一行(我将其列为NSString类别): 然后我会这样使用它: NSString * input = [NSString stringFromStandardInDelimitedByCharactersInSet:[NSCharacterSet newlineCharacterSet]];

您好,我正在制作一个从键盘获取输入的程序,我想知道是否有任何方法可以从键盘获取输入并将其存储在
NSString
对象中。

如果您是作为命令行应用程序执行此操作,那么下面是我上周编写的代码,用于从命令提示符获取一行(我将其列为
NSString
类别):

然后我会这样使用它:

NSString * input = [NSString stringFromStandardInDelimitedByCharactersInSet:[NSCharacterSet newlineCharacterSet]];
它不能很好地处理unicode字符(尽管使用unichar),因为getchar()只返回一个常规字符。但是,对于基本命令行文本输入,它工作得非常好。但是,请注意,这将阻止执行它的线程(因为getchar()是一个阻塞调用)。

为什么不这样做

NSFileHandle *kbd = [NSFileHandle fileHandleWithStandardInput];
NSData *inputData = [kbd availableData];
NSString *option = [[NSString alloc] initWithData:inputData encoding:NSUTF8StringEncoding];

什么样的程序?可能不是传统的GUI,因为字段处理自己的输入。一个控制台应用程序?或者一些带有键盘快捷键的工具,一个la Photoshop?一个游戏?为什么objective-c没有像c中的扫描这样的本机语句?
- (id)init {
    if( !(self = [super init]) ){
        return nil;
    }
    void (^monitorHandler)(NSEvent *);
    monitorHandler = ^(NSEvent *theEvent){
        switch ([theEvent keyCode]) {
            case 123:    // Left arrow
                NSLog(@"Left behind.");
                break;
            case 124:    // Right arrow
                NSLog(@"Right as always!");
                break;
            case 125:    // Down arrow
                NSLog(@"Downward is Heavenward");
                break;
            case 126:    // Up arrow
                NSLog(@"Up, up, and away!");
                break;
            default:
                break;
        }
    };
    // Creates an object we do not own, but must keep track
    // of so that it can be "removed" when we're done 
    [NSEvent addGlobalMonitorForEventsMatchingMask:(NSKeyDownMask) handler:monitorHandler];
    return self;
}
NSFileHandle *kbd = [NSFileHandle fileHandleWithStandardInput];
NSData *inputData = [kbd availableData];
NSString *option = [[NSString alloc] initWithData:inputData encoding:NSUTF8StringEncoding];