У меня есть приложение, которое отправляет следующее NSDistributed Notification , части которого я в конечном итоге хочу "захватить" с помощью CLI и передать его в сценарий оболочки:
{name = TheApplicationNotification; object = TheApplicationNotification; userInfo = {
path = "/path/to/a/file";
}}
Я действительно ничего не знаю о программировании, но мне удалось получить полное уведомление со следующим кодом для маленького CLI , бесстыдно сложенного из двух старых комментариев stackoverflow:
#import <Foundation/NSObject.h>
#import <Foundation/NSNotification.h>
#import <Foundation/NSString.h>
#import <Foundation/NSDistributedNotificationCenter.h>
#import <Foundation/NSRunLoop.h>
#import <stdio.h>
@interface monitorcli: NSObject {}
-(id) init;
-(void) receive: (NSNotification*) notification;
@end
@implementation monitorcli
-(id) init {
NSDistributedNotificationCenter * center
= [NSDistributedNotificationCenter defaultCenter];
[center addObserver: self
selector: @selector(receive:)
name: @"TheApplicationNotification"
object: nil
];
fprintf(stderr,"Listening...\n");
[[NSRunLoop currentRunLoop] run];
fprintf(stderr,"Stopping...\n");
return self;
}
-(void) receive: (NSNotification*) notification {
NSLog(@"%@", notification);
}
@end
int main( int argc, char ** argv) {
[[monitorcli alloc] init];
return 0;
}
Мне также удалось просто получить имя уведомления , заменив
NSLog(@"%@", notification);
на
fprintf(stderr,"%s\n", [[notification name] UTF8String] );
Теперь у меня вопрос: какие изменения в коденеобходимо только напечатать ключ "path" в userInfo ?