2

プロジェクトに次のコードがあります

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;
}

AppleScript 対応ではないが、この 1 つの AppleEvent に応答するプログラムにファイルを渡すエイリアス記述子を作成します。

これを 10.8 でコンパイルすると、すべての Carbon関数が非推奨になり、 APIからFSNewAlias*不透明なブックマークNSDataオブジェクトを使用することになっているため、警告が表示されます。NSURLしかし、このデータをエイリアスの AppleEvent 記述子に変換することはできませんでした。

typeAliasなしで10.8で記述子を作成するにはどうすればよいFSNewAlias*ですか?

4

2 に答える 2

0

他の誰かがより直接的な解決策を探している場合、次のようなものがブックマーク データから Apple Event 記述子を作成するのに適しています。

+ (NSAppleEventDescriptor *)descriptorWithBookmarkDataForFileURL:(NSURL *)fileURL {
    NSData *targetBookmarkData = [fileURL bookmarkDataWithOptions:0 includingResourceValuesForKeys:nil relativeToURL:nil error:nil];
    return [NSAppleEventDescriptor descriptorWithDescriptorType:typeBookmarkData data:targetBookmarkData];
}
于 2014-05-09T06:47:45.097 に答える