Re: Handling UTIs from a Cocoa protocol
Re: Handling UTIs from a Cocoa protocol
- Subject: Re: Handling UTIs from a Cocoa protocol
- From: "C.W. Betts" <email@hidden>
- Date: Sun, 18 Dec 2011 16:42:08 -0700
Thanks for the input everyone.
For those curious, this is the final code:
- (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename
{
NSError *err = nil;
NSString *utiFile = [[NSWorkspace sharedWorkspace] typeOfFile:filename error:&err];
if (err) {
NSRunAlertPanel(NSLocalizedString(@"Error opening file",nil), [NSString stringWithFormat:NSLocalizedString(@"Unable to open %@: %@", nil), [filename lastPathComponent], [err localizedFailureReason]], nil, nil, nil);
return NO;
}
NSArray *handlers = [NSArray arrayWithObjects:[PcsxrPluginHandler class], [PcsxrMemCardHandler class], [PcsxrFreezeStateHandler class], [PcsxrDiscHandler class], nil];
BOOL isHandled = NO;
for (Class fileHandler in handlers) {
NSObject<PcsxrFileHandle> *hand = [[fileHandler alloc] init];
BOOL canHandle = NO;
for (NSString *uti in [fileHandler supportedUTIs]) {
if ([[NSWorkspace sharedWorkspace] type:utiFile conformsToType:uti]) {
canHandle = YES;
}
}
if (canHandle) {
isHandled = [hand handleFile:HandleBinCue(filename)];
}
[hand release];
}
return isHandled;
}
On Dec 18, 2011, at 12:22 PM, Charles Srstka wrote:
> You can just send the alloc/init message directly to the class object.
>
> Charles
>
> On Dec 18, 2011, at 11:01 AM, C.W. Betts wrote:
>
>> Let me see if I got this right. Create an NSArray with classes like this:
>> [NSArray arrayWithObjects:[ClassName1 class], [ClassName2 class], nil]
>> Then how would I call it? Would [[[anArray objectAtIndex:i] alloc] init] work? Or would I have to use a pure C method, something along the lines of getIdFromClass()?
>> On Dec 18, 2011, at 2:20 AM, Charles Srstka wrote:
>>
>>> On Dec 18, 2011, at 3:14 AM, Ken Thomases wrote:
>>>
>>>> On Dec 18, 2011, at 3:06 AM, Charles Srstka wrote:
>>>>
>>>>> On Dec 18, 2011, at 2:49 AM, Ken Thomases wrote:
>>>>>
>>>>>> On Dec 18, 2011, at 2:36 AM, Charles Srstka wrote:
>>>>>>
>>>>>>> On Dec 18, 2011, at 2:31 AM, C.W. Betts wrote:
>>>>>>>
>>>>>>>> So I would do something along the lines of [NSArray arrayWithObjects:ClassName1, ClassName2, nil]?
>>>>>>>
>>>>>>> Or just class1, class2, etc. where class1 and class2 are both of type Class.
>>>>>>
>>>>>> You can use pointers to class objects, but you can't just use class names. If you are starting from class names, you use [ClassName1 class] to get the class object.
>>>>>
>>>>> Well, you *could* just use class names, if you used NSClassFromString() before using the class. There wouldn’t be much point in doing that, though, since class objects can fit inside arrays and would be more convenient to use here.
>>>>
>>>> Did you mean for this to be off-list? Anyway, I took his use of ClassName1 to mean an identifier. After all, he didn't write @"ClassName1”.
>>>
>>> Nope, sorry, that was meant to be on-list. You’re probably right — I had assumed that those were meant to be NSString variables, since that’s what you’d need to be using if you were storing class names. Wasn’t thinking from an Obj-C newbie perspective there; sorry. At any rate, getting the class object by calling +class is, of course, the correct thing to do.
>>>
>>> Charles
>>>
>>> _______________________________________________
>>>
>>> Cocoa-dev mailing list (email@hidden)
>>>
>>> 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:
>>>
>>> This email sent to email@hidden
>>>
>>
>
>
_______________________________________________
Cocoa-dev mailing list (email@hidden)
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:
This email sent to email@hidden