0

У меня есть параметр для внешнего редактора, который конечный пользователь может изменить в настройках. Поскольку я хочу сделать свое программное обеспечение умным, я хочу установить кнопку, которая запускает это внешнее программное обеспечение в отключенное состояние, если программное обеспечение недействительно (возможно, TextEdit был перемещен в Утилиты или где-то еще или что-то еще не так, что-то может произойти, правильно ?) ..Как проверить действительное приложение с применением запуска NSWorkspace в Cocoa/Xcode/OBJ-C

// Default setting: /Applications/TextEdit.app 

[[NSWorkspace sharedWorkspace] launchApplication: [[NSUserDefaults standardUserDefaults] stringForKey: @"externalapp"]]; 

я мог бы просто сделать простой тест, который расположение является действительным, и существует, но по какой-то причине я решил пойти фантазии пути и пришел к мысли, что должно быть тест, который проверяет это для подходящее приложение - ему не нужно проверять его на TextEdit.app - потому что вся идея заключается в том, что вы можете использовать почти любой редактор, который вы хотите - вот почему он настраивается в первую очередь - но мне просто нужно простое убедитесь, что мы не столкнемся с проблемами, которые можно было избежать этим тестом.

И да, я знаю, что я должен использовать TextEdit.app, чтобы открыть файл, но пока я еще не нахожусь на этом этапе, поэтому для открытия еще ничего не создано, я сделаю это позже - в этом фазе, этого достаточно, чтобы увидеть, что идея работает, и я могу провести некоторое тестирование. Но я слушаю, если кто-то хочет поделиться хорошими идеями, о которых я, возможно, еще не думал об этом.

ответ

0

Это как сделать тест, который я просил ..

NSString *fileType = [sharedWorkspace typeOfFile: [[NSUserDefaults standardUserDefaults] stringForKey: @"externalapp"] error:nil]; 

if ((UTTypeEqual((CFStringRef)fileType, kUTTypeApplication)) || (UTTypeEqual((CFStringRef)fileType, kUTTypeApplicationBundle)) || (UTTypeEqual((CFStringRef)fileType, kUTTypeApplicationFile))) 
    NSLog(@"Yes - File type is equal to Application"); 

Вот собственно реализация трансформатора:

@implementation icalValidTransformer 

+ (Class)transformedValueClass { return [NSNumber class]; } 
+ (BOOL)allowsReverseTransformation { return NO; } 

- (id)transformedValue:(id)value { 
    if ((value == nil) || ([[NSApp delegate]sharedWorkspace] == nil)) 
     return [NSNumber numberWithBool: NO]; 

    NSError *fileError = nil; 
    NSString *fileType = [[[NSApp delegate] sharedWorkspace] typeOfFile:value error: &fileError]; 

    if (fileError != nil) 
     return [NSNumber numberWithBool: NO]; 

    if ((UTTypeEqual((CFStringRef)fileType, kUTTypeApplication)) || (UTTypeEqual((CFStringRef)fileType, kUTTypeApplicationBundle)) || (UTTypeEqual((CFStringRef)fileType, kUTTypeApplicationFile))) 
     return [NSNumber numberWithBool: YES]; 

    return [NSNumber numberWithBool: NO]; 
} 

@end 

Это также очень хороший пример того, как использовать fileError с -typeOfFile - если есть ошибка (например, файл не существует) эта отключенная кнопка/меню/любой элемент управления, который вы использовали.

Смежные вопросы