0

エンドユーザが設定を変更できる外部エディタの設定があります。私はソフトウェアをスマートにしたいので、ソフトウェアが有効でない場合、この外部ソフトウェアを無効状態にするボタンを設定したいと考えています(TextEditがUtilitiesやその他の場所に移動したり、何かが間違っていたり、 ?)..Cocoa/Xcode/OBJ-CでNSWorkspace起動アプリケーションを使用して有効なアプリケーションをテストする方法

// 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で - エラーがある場合(たとえばファイルが存在しない場合)、このボタン/メニュー/使用していたコントロールを無効にします。