0

我對外部編輯器,最終用戶可以在設置中更改設置。至於我要讓我的軟件智能,我想設置按鈕啓動這個外部軟件來禁用狀態,如果軟件是無效的(也許文字編輯已被移動到工具或其他地方或遇到其他問題,什麼事情都有可能發生,正確的?)..如何測試與可可/ Xcode中NSWorkspace launchapplication有效的應用程序/ OBJ-C

// Default setting: /Applications/TextEdit.app 

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

我可以做一個簡單的測試,地點是有效的和存在,但由於某種原因,我決定去花哨的方式,來到認爲,應該有一個測試,測試本作適當的應用程序 - 它並不需要測試它TextEdit.app - 因爲整個想法是,你幾乎可以使用任何編輯器,你want--這就是爲什麼它是擺在首位定製的 - 但我只想要一個簡單的檢查我們是否會遇到本測試可能避免的問題。

是的,我知道我應該使用TextEdit.app打開一個文件,但我不認爲在目前階段,所以沒有開生產任何東西,我會做,在這個later--相這足以看出,思想工作,我可以做一些測試。但我聽,如果有人想分享,我也許還沒有想到這個好主意。

回答

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 - 如果出現錯誤(例如,文件不存在),你用這個被禁用按鈕/菜單/無論控制..

相關問題