使用PyObjC解析Finder别名时遭遇NSURL初始化错误
解决PyObjC中NSURL解析Finder别名的初始化错误
错误原因:你调用的initByResolvingAliasFileAtURL_options_error_是实例初始化方法,仅能用于未初始化的NSURL对象(即alloc后未调用过初始化方法的实例)。但你先通过NSURL.fileURLWithPath_()创建了一个已完全初始化的NSURL实例,再在这个实例上调用初始化方法,就会触发NSGenericException错误。
正确代码示例:
from Foundation import NSURL alias_path = "Apps/calibre" # 创建指向别名文件的URL alias_url = NSURL.fileURLWithPath_(alias_path) # 用alloc生成未初始化的NSURL实例,再调用初始化方法解析别名 resolved_url, stale, error = NSURL.alloc().initByResolvingAliasFileAtURL_options_error_(alias_url, 0, None) # 验证解析结果 if error: print(f"解析失败:{error}") else: if stale: print("别名已过期,但解析成功") print(f"原始文件路径:{resolved_url.path()}")
补充说明:
NSURL.alloc()会生成未初始化的NSURL实例,此时调用初始化方法才符合Objective-C的对象生命周期规则。- 参数
0代表使用默认解析选项,若需特殊行为,可替换为对应常量(如NSURLAliasFileResolutionWithoutUI)。 - 调用后需检查
error对象,确认解析操作是否成功。
内容的提问来源于stack exchange,提问作者Philip Kearns
相关产品推荐
相关产品推荐

