こんにちは私はキーボードから入力を取得するプログラムを作成していますが、キーボードから入力を取得してNSString
オブジェクトに保存する方法があるかどうか疑問に思いました。
6374 次
3 に答える
7
これをコマンドラインアプリとして実行している場合は、コマンドプロンプトから行を取得するために先週作成したコードを次に示します(NSString
カテゴリにしました)。
+ (NSString *) stringFromStandardInDelimitedByCharactersInSet:(NSCharacterSet *)delimiters {
NSMutableString * string = [NSMutableString string];
unichar input = '\0';
while (input = getchar()) {
if ([delimiters characterIsMember:input]) { break; }
[string appendFormat:@"%C", input];
}
return string;
}
そして、私はそれを次のように使用します:
NSString * input = [NSString stringFromStandardInDelimitedByCharactersInSet:[NSCharacterSet newlineCharacterSet]];
getchar()は通常のcharしか返さないため、(unicharを使用しているにもかかわらず)Unicode文字をうまく処理できません。ただし、基本的なコマンドラインテキスト入力の場合は、かなりうまく機能します。ただし、これにより、実行されるスレッドがブロックされることに注意してください(getchar()はブロッキング呼び出しであるため)。
于 2009-11-29T23:10:47.707 に答える
3
- (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;
}
于 2012-04-06T19:43:17.963 に答える
1
なぜこれではないのですか?
NSFileHandle *kbd = [NSFileHandle fileHandleWithStandardInput];
NSData *inputData = [kbd availableData];
NSString *option = [[NSString alloc] initWithData:inputData encoding:NSUTF8StringEncoding];
于 2014-02-07T03:53:25.560 に答える