macOS NSDistributedNotification: значение fprint или NSLog определенного ключа в userInfo? - PullRequest
0 голосов
/ 01 июня 2018

У меня есть приложение, которое отправляет следующее 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 ?

1 Ответ

0 голосов
/ 01 июня 2018

Попробуйте:

NSLog(@"%@", notification.userInfo[@"path"]);

.userInfo Получает значение свойства userInfo, это словарь.[@"path"] затем получает значение, связанное с ключом @"path" в словаре.

Примечание: весь код введен непосредственно в ответ, ожидаются незначительные опечатки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...