Reposted due to 25KB size limit. Sorry. On 23 Aug 2008, at 06:42, Adam Thorsen wrote:
Are there any examples of using the UTI API to determine the UTI given a path to a file?Thanks, -Adam
In my app I have a singleton UTI controller class that has an NSArray property of UTIs supported by my application. There's also a dictionary that maps the Core Data entities that I use to represent each file type at runtime. Here are the methods of my UTI controller, hope they help. I've replaced most of the string constants with external declarations already but a couple are still constant strings. They show how to use -[NSWorkspace type:conformsToType:] and -[NSWorkspace typeOfFile:error:]
As for your info.plist file, and exported and imported declarations, there's a good article here:
http://developer.apple.com/documentation/Carbon/Conceptual/understanding_utis/understand_utis_conc/chapter_2_section_4.html - (id)init; { if (![super init]) return nil;self.supportedUTIs = [NSArray arrayWithObjects:(NSString *)kUTTypePlainText ,kUTTypeTex,kUTTypeTeXShopTex,kUTTypeBib,kUTTypeBibDeskBib,(NSString *)kUTTypePDF,(NSString *)kUTTypeImage,kUTTypeEPS,nil]; self.utiEntityNameMap = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:ESTexFileEntityName ,ESTexFileEntityName ,ESTexFileEntityName ,@"BibTexFile ",@"BibTexFile ",ESPDFFileEntityName,ESImageFileEntityName,@"EPSFile",nil] forKeys:self.supportedUTIs];
return self;
}
- (NSString *)isSupportedUTI:(NSString *)uti error:(NSError
**)errorPointer;
{
for (NSString *supportedUTI in self.supportedUTIs)
if ([[NSWorkspace sharedWorkspace] type:uti
conformsToType:supportedUTI])
return supportedUTI;
if (errorPointer != NULL)
*errorPointer = [NSError errorWithDomain:ESScribblerErrorDomain
code:ESUnsupportedUTIErrorCode userInfo:[NSDictionary
dictionaryWithObjectsAndKeys:NSLocalizedString
(@"",@""),NSLocalizedDescriptionKey
,NSLocalizedString
(@"",@""),NSLocalizedRecoverySuggestionErrorKey
,uti,ESUnsupportedUTIErrorKey,nil]];
return nil;
}
- (NSString *)isSupportedFile:(NSString *)filepath error:(NSError
**)errorPointer;
{
NSString *uti = [[NSWorkspace sharedWorkspace] typeOfFile:filepath
error:errorPointer];
if (!uti)
return nil;
return [self isSupportedUTI:uti error:errorPointer];
}
- (NSString *)entityNameForFile:(NSString *)filepath error:(NSError
**)errorPointer;
{
NSString *supportedUTI = [self isSupportedFile:filepath
error:errorPointer];
if (!supportedUTI)
return nil;
return [self.utiEntityNameMap valueForKey:supportedUTI]; // leave
this error as nil, if we've got this far then we can determine the UTI
} /*Maps the UTIs for the files and create a dictionary of entity name values and filepath keys. All errros are put into an NSDictionary. It is guaranteed to return a dictionary, so clients must inspect both the errors dictionary and the count of the returned dictionary. This method can't reasonably return nil as the presence of errors does not preclude the presence of supported files. To return nil if there are errors is too simplistic.
*/- (NSDictionary *)entityMapForFiles:(NSArray *)filepaths errors: (NSDictionary **)dictionaryPtr;
{
NSMutableDictionary *mutableErrorsDictionary = [NSMutableDictionary
dictionary];
NSMutableDictionary *mutableEntityMap = [NSMutableDictionary
dictionary];
for (NSString *filepath in filepaths) {
NSError *entityError = nil;
NSString *entityName = [self entityNameForFile:filepath
error:&entityError];
if (!entityName)
[mutableErrorsDictionary setObject:entityError
forKey:filepath];
else
[mutableEntityMap setObject:entityName forKey:filepath];
}
if ([mutableErrorsDictionary count] != 0 && dictionaryPtr != NULL)
*dictionaryPtr = [[mutableErrorsDictionary copy] autorelease];
return [[mutableEntityMap copy] autorelease];
}
Jonathan
http://espresso-served-here.com
smime.p7s
Description: S/MIME cryptographic signature
_______________________________________________ Cocoa-dev mailing list ([email protected]) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to [EMAIL PROTECTED]
