我在项目中有以下代码
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
API中的不透明书签NSURL
对象。但是,我没有把这些数据变成别名AppleEvent描述符的运气。
如何在没有typeAlias
的情况下在10.8中创建FSNewAlias*
描述符?
答案 0 :(得分:1)
typeFileURL
,其中内容只是URL的字节。这无疑取决于正确编写的目标应用程序,但它应该可以工作。
答案 1 :(得分:0)
如果其他人正在寻找更直接的解决方案,这样的事情可以很好地从书签数据创建Apple事件描述符:
+ (NSAppleEventDescriptor *)descriptorWithBookmarkDataForFileURL:(NSURL *)fileURL {
NSData *targetBookmarkData = [fileURL bookmarkDataWithOptions:0 includingResourceValuesForKeys:nil relativeToURL:nil error:nil];
return [NSAppleEventDescriptor descriptorWithDescriptorType:typeBookmarkData data:targetBookmarkData];
}