/ / Как да активирам Услуги, които работят на избрани файлове и папки - цел-c, макроси

Как да активирам Услуги, които работят на избрани файлове и папки - цел-c, макроси

Опитвам се да активирам Услуги, които работят на избрани Files and Folders подобни на тези, които могат да бъдат извикани в Finder.

Имам следното въз основа на Services Implementation Guide който работи, но само за текста и т.н.

+ (void)initialize {
static BOOL initialized = NO;
/* Make sure code only gets executed once. */
if (initialized == YES) return;
initialized = YES;

NSArray *sendTypes = [NSArray arrayWithObject:NSStringPboardType];
[NSApp registerServicesMenuSendTypes:sendTypes returnTypes:nil];
NSLog(@"initialize MyTableView");
}
- (id)validRequestorForSendType:(NSString *)sendType returnType:(NSString *)returnType {
NSLog(@"validRequestorForSendType %@%@", sendType, returnType);
if ([sendType isEqual:NSStringPboardType]) {
return self;
}
return [super validRequestorForSendType:sendType returnType:returnType];
}

Как да внедря URL адрес?

В документацията се посочва

Вашият обект NSResponder може да регистрира всекитип данни от пастел, обществено или патентовано, често или рядко. Ако тя се занимава с обществеността и е обща видове, разбира се, има достъп до повече услуги. За списък с стандартни типове данни за памет, вижте NSP Каталожна класификация на класа.

Изглежда, че няма съответстващ тип данни на пастов картон. опитах NSURL, NSURL class NSFilenamesPboardType работи частично, но не показва всички услуги Finder, и изглежда, че принадлежи на (OS X v10.5 и по-рано)

Редактиране на изясняване

Следвах Services Implementation Guide, която изглежда има 3 стъпки

1. Регистриране на обекти за услуги

NSApp registerServicesMenuSendTypes: returnTypes:

2.Извършване на менюто за услуги

validRequestorForSendType:returnType:

3. Изпращане на данни до службата

writeSelectionToPasteboard:types:

Имам първите 2 частично да работя (въпреки че не мога да получа същото меню, което виждам в Finder, когато е избран Файл, по-специално Files and Folders )

Третият изглежда е залепващият момент Това изглежда е подкрепено NSTextView, но отхвърлен за NSObject

Наистина търся някаква идея как да използвам Услугите Files and Folders по същия начин, както много други приложения.

Меню на желаните услуги

Отговори:

1 за отговор № 1

Направих тази работа и публикувам резултата в полза на други, които биха искали да направят подобни.

Първите 3 метода са в моя клас, които подкласират Изглед

+ (void)initialize {
static BOOL initialized = NO;
/* Make sure code only gets executed once. */
if (initialized == YES) return;
initialized = YES;

[NSApp registerServicesMenuSendTypes:[NSArray arrayWithObject:(__bridge NSString *)kUTTypeFileURL] returnTypes:nil];
}
- (id)validRequestorForSendType:(NSString *)sendType returnType:(NSString *)returnType {
if ([sendType isEqual:(__bridge NSString *)kUTTypeFileURL]) {
return self;
}
return [super validRequestorForSendType:sendType returnType:returnType];
}
- (BOOL)writeSelectionToPasteboard:(NSPasteboard *)pboard types:(NSArray *)types {
if([self.keyDelegate respondsToSelector:@selector(writeSelectionToPasteboard:types:)])
return [self.keyDelegate writeSelectionToPasteboard:pboard types:types];
return FALSE;
}

Последният от делегатите действително пише на картонената кутия.

- (BOOL)writeSelectionToPasteboard:(NSPasteboard *)pboard types:(NSArray *)types {
return [pboard setString:[[[self selectedFile] url] absoluteString] forType:(__bridge NSString *)kUTTypeFileURL];
}

Имаше известно количество предположения / експерименти, защото изискванията изглежда не са ясно определени. Това е просто изпълнение, защото се интересувам само от един тип.