У меня есть следующий код в проектеСоздание дескриптора AppleEvent для псевдонима в OS X 10.8
NSAppleEventDescriptor *JHCreateAliasDescriptorForURL(NSURL *aURL) {
NSAppleEventDescriptor *retObj = nil;
FSRef fsReference;
if (CFURLGetFSRef((__bridge CFURLRef)aURL, &fsReference)) {
AliasHandle aliasHandle = NULL;
OSStatus err = FSNewAliasMinimal(&fsReference, &aliasHandle);
if (err == noErr && aliasHandle != NULL) {
HLock((Handle)aliasHandle);
retObj = [NSAppleEventDescriptor descriptorWithDescriptorType:typeAlias
data:[NSData dataWithBytes:*aliasHandle
length:GetHandleSize((Handle)aliasHandle)]];
HUnlock((Handle)aliasHandle);
DisposeHandle((Handle)aliasHandle);
}
}
return retObj;
}
Это создает дескриптор псевдоним, который передает файл в программу, которая не applescriptable но реагирует на это один AppleEvent.
Когда я компилирую это под 10.8, я получаю предупреждение, так как все функции Carbon FSNewAlias*
являются устаревшими, и мы должны использовать непрозрачную Закладку NSData
объектов из NSURL
API. Тем не менее, мне не повезло превратить эти данные в псевдонимы дескрипторов AppleEvent.
Как я могу написать дескриптор typeAlias
в 10.8 без FSNewAlias*
?
Я постараюсь, но я подозреваю, что мой приемный приложение выиграл Не делай этого - это очень проприетарное приложение. (Я не называю имена, но это Avid Pro Tools.) – iluvcapra
Я подозреваю, что вы действительно можете использовать принуждение типа в своем собственном коде для создания записи псевдонима из URL-адреса файла без устаревшего API, а затем помещать его в отправляемое событие. То есть, сохраните 'typeFileURL' в записи и затем получите' typeAlias'. Затем сохраните это 'typeAlias'. –
Честно говоря, Авиду пришлось бы уйти с пути, чтобы их сторона не работала. Однако, если бы они это сделали, тогда предложение Кена о принуждении будет работать, за исключением того, что я буду использовать '- [NSAppleEventDescriptor coerceToDescriptorType:]' (или, если хотите, 'AECoerceDesc'). –