최종 사용자가 설정을 변경할 수있는 외부 편집기에 대한 설정이 있습니다. 내 소프트웨어를 똑똑하게 만들고 싶으면이 외부 소프트웨어를 비활성화 상태로 시작하는 버튼을 설정해야합니다. 소프트웨어가 유효하지 않은 경우 (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을 사용하는 방법의 아주 좋은 예입니다