0

エンドユーザーが設定を変更できる外部エディターの設定があります。ソフトウェアをスマートにしたいので、ソフトウェアが有効でない場合(テキストエディットがユーティリティまたは他の場所に移動されたか、何か問題が発生した場合、何かが起こる可能性があります)、この外部ソフトウェアを無効状態に開始するボタンを設定したいと思います。 ?)..

// Default setting: /Applications/TextEdit.app

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

場所が有効で存在するという簡単なテストを行うこともできますが、何らかの理由で、適切なアプリケーションのためにこれをテストするテストがあるべきだと思いました-テストする必要はありませんTextEdit.appの場合-全体的な考え方は、ほぼすべてのエディターを使用できるということです-そもそもカスタマイズ可能である理由です-しかし、問題が発生しないことを簡単に確認したいだけです。このテストでは回避されました。

はい、TextEdit.appを使用してファイルを開く必要があることはわかっていますが、まだそのフェーズにないため、開くために作成されたものはまだありません。後で行います。このフェーズでは、これで十分です。アイデアが機能し、テストを実行できることを確認します。しかし、私がまだ考えていない良いアイデアを誰かが共有したい場合は、聞いています。

4

1 に答える 1

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

これは、-typeOfFileでfileErrorを使用する方法の非常に良い例でもあります-エラーがある場合(たとえば、ファイルが存在しない場合)、この無効なボタン/メニュー/使用していたコントロール。

于 2012-04-08T10:31:48.387 に答える