仅在拖动到应用程序图标时打开图像文件

时间:2013-11-25 19:39:57

标签: objective-c cocoa

我正在开发一个适用于图片的小应用程序(它不是基于文档的应用程序)。 我希望能够通过将图像文件拖到应用程序图标来打开它们。 我看过这个非常明确的解释

Cocoa/Obj-C - Open file when dragging it to application icon

并添加了通过拖动到应用图标打开.png文件的功能。

我是否必须单独添加所需的所有文件类型,或者是否有指定所有图像类型的方法(例如NSImageView将接受的所有图像类型)?

1 个答案:

答案 0 :(得分:1)

在您的应用程序的Info.plist中,您可以在public.image中为文档类型指定Uniform Type Identifier LSItemContentTypes,即使您的应用程序不是基于文档的:

<array>
    <dict>
        <key>CFBundleTypeRole</key>
        <string>Viewer</string>
        <key>LSItemContentTypes</key>
        <array>
            <string>public.image</string>
        </array>
    </dict>
</array>

public.image UTI

如果您还要打开其他类型的文件,您可能需要检查删除的文件是否为图像:

- (BOOL)application:(NSApplication *)sender openFile:(NSString *)filename {
    NSError *error;
    NSString *fileUTI = [[NSWorkspace sharedWorkspace] typeOfFile:filename error:&error];

    if (!fileUTI)
        NSLog(@"Error when trying to detect the type of file %@: %@", filename, error);
    else if (UTTypeConformsTo((__bridge CFStringRef)fileUTI, kUTTypeImage))
        NSLog(@"%@ is an image", filename);
    else
        NSLog(@"%@ is not an image", filename);

    return YES;
}