Как приложение Cocoa взаимодействует с инструментом командной строки? [Дубликат]

Если это единственные три значения, вы можете использовать a CASE выражение :

ORDER BY `ID`,
         CASE `Language`
         WHEN 'ENU' THEN 1
         WHEN 'JPN' THEN 2
         WHEN 'DAN' THEN 3
         END

(Если могут быть другие значения, тогда вы можете захотеть чтобы добавить некоторую дополнительную логику, чтобы упорядочить упорядочение, например, вы можете добавить ELSE 4 к этому выражению CASE, а затем упорядочить по Language в качестве третьего критерия заказа:

ORDER BY `ID`,
         CASE `Language`
         WHEN 'ENU' THEN 1
         WHEN 'JPN' THEN 2
         WHEN 'DAN' THEN 3
         ELSE 4
         END,
         `Language`
)

8
задан bjz 15 June 2012 в 06:23
поделиться

2 ответа

Вы можете использовать селектора setStandardInput:, setStandardOutput: и setStandardError: NSTask в сочетании с экземплярами NSPipe для связи с запущенной программой.

Например, чтобы прочитать вывод задачи:

task = [[NSTask alloc] init];
[task setStandardOutput: [NSPipe pipe]];
[task setStandardError: [task standardOutput]]; // Get standard error output too
[task setLaunchPath: @"/usr/bin/gdb"];
[task launch];

Затем вы можете получить экземпляр NSFileHandle, который вы можете использовать для чтения вывода задачи с помощью:

NSFileHandle *readFromMe = [[task standardOutput] fileHandleForReading]; 

Чтобы настроить канал для отправки команд в gdb, вы должны добавьте

[task setStandardInput: [NSPipe pipe]];

перед запустите задачу. Затем вы получаете NSFileHandle с

NSFileHandle *writeToMe = [[task standardInput] fileHandleForWriting];
2
ответ дан sjs 24 August 2018 в 02:25
поделиться

Используйте методы setStandardInput: и setStandardOutput: класса NSTaks .

NSTask *task;
task = [[NSTask alloc] init];
[task setLaunchPath: @"/usr/bin/gdb"];

NSPipe *outputpipe=[[NSPipe alloc]init];
NSPipe *errorpipe=[[NSPipe alloc]init];
NSFileHandle *output,*error;

[task setArguments: arguments];
[task setStandardOutput:outputpipe];
[task setStandardError:errorpipe];

NSLog(@"%@",arguments);

output=[outputpipe fileHandleForReading];    
error=[errorpipe  fileHandleForReading];    
[task launch]; 

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receivedData:)  name: NSFileHandleReadCompletionNotification object:output];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receivedError:)  name: NSFileHandleReadCompletionNotification object:error];    
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(TaskCompletion:)  name: NSTaskDidTerminateNotification object:task];

//[input writeData:[NSMutableData initWithString:@"test"]];
[output readInBackgroundAndNotify];
[error readInBackgroundAndNotify];

[task waitUntilExit];
[outputpipe release];
[errorpipe release];
[task release];

-(void) receivedData:(NSNotification*) rec_not {
    NSFileHandle *out=[[task standardOutput] fileHandleForReading]; 
    NSData *dataOutput=[[rec_not userInfo] objectForKey:NSFileHandleNotificationDataItem];

    if( !dataOutput)
        NSLog(@">>>>>>>>>>>>>>Empty Data");

    NSString *strfromdata=[[NSString alloc] initWithData:dataOutput encoding:NSUTF8StringEncoding];    
    [out readInBackgroundAndNotify];
    [strfromdata release];
}

/* Called when there is some data in the error pipe */
-(void) receivedError:(NSNotification*) rec_not {
    NSFileHandle *err=[[task standardError] fileHandleForReading];  
    NSData *dataOutput=[[rec_not userInfo] objectForKey:NSFileHandleNotificationDataItem];

    if( !dataOutput)    
        NSLog(@">>>>>>>>>>>>>>Empty Data");
    else {
        NSString *strfromdata=[[NSString alloc] initWithData:dataOutput encoding:NSUTF8StringEncoding];
    [strfromdata release];
    }
    [err readInBackgroundAndNotify];
}

/* Called when the task is complete */
-(void) TaskCompletion :(NSNotification*) rec_not { 
    NSLog(@"task ended");
}
2
ответ дан iOS Calendar View OnMyProfile 24 August 2018 в 02:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: