0

최종 사용자가 설정을 변경할 수있는 외부 편집기에 대한 설정이 있습니다. 내 소프트웨어를 똑똑하게 만들고 싶으면이 외부 소프트웨어를 비활성화 상태로 시작하는 버튼을 설정해야합니다. 소프트웨어가 유효하지 않은 경우 (TextEdit이 유틸리티 또는 다른 곳으로 이동되었거나 다른 것이 잘못되었을 때, ?) .. 위치가 유효한지Cocoa/Xcode/OBJ-C에서 NSWorkspace 실행 응용 프로그램으로 유효한 응용 프로그램을 테스트하는 방법

// Default setting: /Applications/TextEdit.app 

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

난 그냥 간단한 테스트를 할 수 있지만, 어떤 이유로 나는 멋진 길을 가기로 결정하고이를 테스트하는 시험이되어야한다고 생각했다 적절한 응용 프로그램 - TextEdit.app 용으로 테스트 할 필요가 없습니다. 전체 아이디어는 원하는 거의 모든 편집기를 사용할 수 있다는 것입니다. 그래서 처음부터 사용자 정의가 가능한 이유입니다. 이 테스트에서 피할 수있는 문제가 발생하지 않는지 확인하십시오.

네, 파일을 여는 데 TextEdit.app를 사용해야한다는 것을 알고 있습니다. 그러나 아직 그 단계에 있지 않아서 아직 열어 볼 제품이 없기 때문에 나중에 할 것입니다. 단계 이것은 아이디어가 효과가 있고 나는 몇몇 테스트를 할 수 있다는 것을보기에 충분하다. 그러나 누군가 내가 좋은 아이디어를 공유하기를 원한다면 나는 듣고있다.

@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을 사용하는 방법의 아주 좋은 예입니다

답변

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"); 

가 적절한 변압기 구현을 수행하는 방법이다 -typeOfFile - 오류가있는 경우 (예 : 파일이 없습니다)이 버튼/메뉴/사용하고 있던 컨트롤을 사용하지 마십시오.