Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
其中';iPhone MIME类型数据库是什么?_Iphone_Objective C_Cocoa_Cocoa Touch - Fatal编程技术网

其中';iPhone MIME类型数据库是什么?

其中';iPhone MIME类型数据库是什么?,iphone,objective-c,cocoa,cocoa-touch,Iphone,Objective C,Cocoa,Cocoa Touch,我有一个用于iPhone的程序,该程序根据文件名列表执行智能操作(为文件类型选择合适的图标)。我正在寻找类似于/etc/mime.types或者类似的东西的iPhone——我假设手机可以使用API调用。这个存在吗?如果存在,你的应用肯定没有权限直接读取它。你想干什么 编辑 这是我不久前写的一个函数。我是为Mac写的,但看起来iPhone上也有相同的功能。基本上,您给它一个文件名,它使用路径扩展名返回文件的MIME类型: #import <MobileCoreServices/MobileC

我有一个用于iPhone的程序,该程序根据文件名列表执行智能操作(为文件类型选择合适的图标)。我正在寻找类似于/etc/mime.types或者类似的东西的iPhone——我假设手机可以使用API调用。这个存在吗?

如果存在,你的应用肯定没有权限直接读取它。你想干什么

编辑

这是我不久前写的一个函数。我是为Mac写的,但看起来iPhone上也有相同的功能。基本上,您给它一个文件名,它使用路径扩展名返回文件的MIME类型:

#import <MobileCoreServices/MobileCoreServices.h>
...
- (NSString*) fileMIMEType:(NSString*) file {
    CFStringRef UTI = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, (CFStringRef)[file pathExtension], NULL);
    CFStringRef MIMEType = UTTypeCopyPreferredTagWithClass (UTI, kUTTagClassMIMEType);
    CFRelease(UTI);
    return [(NSString *)MIMEType autorelease];
}
#导入
...
-(NSString*)文件MIMETYPE:(NSString*)文件{
CFStringRef UTI=UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension,(CFStringRef)[文件路径扩展名],NULL);
CFStringRef MIMEType=UTTypeCopyPreferredTagWithClass(UTI,kUTTagClassMIMEType);
CFD释放(UTI);
return[(NSString*)MIMEType autorelease];
}

以下函数将返回Swift 2中给定文件扩展名的mime类型

import MobileCoreServices

func mimeTypeFromFileExtension(fileExtension: String) -> String? {
    guard let uti: CFString = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, fileExtension as NSString, nil)?.takeRetainedValue() else {
        return nil
    }

    guard let mimeType: CFString = UTTypeCopyPreferredTagWithClass(uti, kUTTagClassMIMEType)?.takeRetainedValue() else {
        return nil
    }

    return mimeType as String
}

在obj-C中,使用C时警告内存泄漏

- (NSString *)guessMIMETypeFromFileName: (NSString *)fileName {
    CFStringRef UTI = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, (__bridge CFStringRef)[fileName pathExtension], NULL);
    CFStringRef MIMEType = UTTypeCopyPreferredTagWithClass(UTI, kUTTagClassMIMEType);
    CFRelease(UTI);
    if (!MIMEType) {
        return @"application/octet-stream";
    }
    NSString *dest = [NSString stringWithString:(__bridge NSString *)(MIMEType)];
    CFRelease(MIMEType);

    return dest;
}

更新对Swift 5.3的优秀且被接受的答案,作为URL扩展

extension URL {
    var mime: String {
        guard
            let uti = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, pathExtension as CFString, nil)
        else { return "" }
        let mime = uti.takeRetainedValue() as String
        uti.release()
        return mime
    }
}

在iPhone上不起作用
-我的坏。您需要包括MobileCoreServices框架,并且导入我在一台iPad设备(iPad 1st gen/5.1.1)上的pdf文件中遇到了问题,但在另一台(iPad 3/5.1.1)或模拟器(5.1)中没有遇到问题。pathExtension是pdf,UTI作为com.adobe.pdf返回OK,但MIMEType返回nil。有什么可能导致这种情况吗?MIMEType注册表会在设备上损坏吗?@slf是的,这基本上等同于答案中的内容。