我有一个拖放 NSView
,它应该接受与我在 plist
的 CFBundleDocumentTypes
键下列出的相同的文件类型和扩展名>。该应用接受 public.movie
类型未选取的任何类型的视频文件、文件夹和多个文件扩展名。
CFBundleDocumentTypes
的(相当长的)列表是:
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeName</key>
<string>Folder</string>
<key>CFBundleTypeOSTypes</key>
<array>
<string>fold</string>
</array>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
</dict>
<dict>
<key>CFBundleTypeName</key>
<string>Movies</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
<key>LSItemContentTypes</key>
<array>
<string>public.movie</string>
</array>
</dict>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>flv</string>
</array>
<key>CFBundleTypeName</key>
<string>Flash Video File</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
</dict>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>ram</string>
<string>rm</string>
<string>rmvb</string>
</array>
<key>CFBundleTypeName</key>
<string>RealPlayer Media Files</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
</dict>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>vob</string>
</array>
<key>CFBundleTypeName</key>
<string>VOB File (DVD Video)</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
</dict>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>ogm</string>
</array>
<key>CFBundleTypeName</key>
<string>Ogg MPEG-4 Video File</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
</dict>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>ogv</string>
</array>
<key>CFBundleTypeMIMETypes</key>
<array>
<string>video/ogg</string>
</array>
<key>CFBundleTypeName</key>
<string>Ogg Video File</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
</dict>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>axv</string>
</array>
<key>CFBundleTypeMIMETypes</key>
<array>
<string>video/annodex</string>
</array>
<key>CFBundleTypeName</key>
<string>Annodex Video File</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
</dict>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>avi</string>
</array>
<key>CFBundleTypeName</key>
<string>AVI container</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
</dict>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>mov</string>
<string>moov</string>
<string>qt</string>
</array>
<key>CFBundleTypeMIMETypes</key>
<array>
<string>video/quicktime</string>
</array>
<key>CFBundleTypeName</key>
<string>Apple QuickTime container</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
</dict>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>divx</string>
</array>
<key>CFBundleTypeName</key>
<string>DivX file</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
</dict>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>dv</string>
</array>
<key>CFBundleTypeName</key>
<string>DV file</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
</dict>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>wmv</string>
<string>wm</string>
</array>
<key>CFBundleTypeName</key>
<string>Windows Media Video</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
</dict>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>mpg</string>
<string>mpeg</string>
<string>mpeg1</string>
<string>mpeg2</string>
</array>
<key>CFBundleTypeName</key>
<string>multiplexed MPEG-1/2</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
</dict>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>m1v</string>
</array>
<key>CFBundleTypeName</key>
<string>MPEG-1 Video File</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
</dict>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>ts</string>
<string>m2ts</string>
<string>mts</string>
<string>mt2s</string>
</array>
<key>CFBundleTypeMIMETypes</key>
<array>
<string>video/mp2t</string>
</array>
<key>CFBundleTypeName</key>
<string>MPEG-2 Transport Stream</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
</dict>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>m2v</string>
<string>mpv</string>
</array>
<key>CFBundleTypeName</key>
<string>MPEG-2 Video File</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
</dict>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>mp4</string>
<string>mpeg4</string>
<string>m4v</string>
</array>
<key>CFBundleTypeName</key>
<string>MPEG-4 File</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
</dict>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>3gp</string>
</array>
<key>CFBundleTypeName</key>
<string>3GPP File</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
</dict>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>mkv</string>
</array>
<key>CFBundleTypeName</key>
<string>Matroska Video File</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
</dict>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>webm</string>
</array>
<key>CFBundleTypeName</key>
<string>WebM Video File</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
</dict>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>nuv</string>
</array>
<key>CFBundleTypeName</key>
<string>NuppleVideo File</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
<key>LSTypeIsPackage</key>
<false/>
<key>NSPersistentStoreTypeKey</key>
<string>Binary</string>
</dict>
</array>
我已经能够在 NSView 的 draggingEntered
方法中验证放置接受情况,但我希望能够运行 CFBundleDocumentTypes 的
而不是复制此方法中的所有条目。如何执行此操作,以便我的 View 接受与 Info.plist
条目CFBundleDocumentTypes
条目中列出的完全相同的文件?
最佳答案
只需向您的包询问信息即可:
NSArray* documentTypes = [[[NSBundle mainBundle] infoDictionary]
objectForKey:@"CFBundleDocumentTypes"];
这将返回一个字典数组,每个字典对应一种文件类型,您可以从中轻松提取其他信息:
for(NSDictionary* docInfo in documentTypes)
{
NSArray* fileExtensions = [docInfo objectForKey:@"CFBundleTypeExtensions"];
//do something with this info
}
您可以将其与 NSDocumentController
的 -documentClassForType:
方法结合使用。这将 CFBundleTypeName
Info.plist
键中的值作为类型。
关于objective-c - 使用 CFBundleDocumentTypes 过滤拖放 NSView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8303744/