gpt4 book ai didi

objective-c - 使用 ARC 将 CFErrorRef 转换为 NSError(或相反)

转载 作者:太空狗 更新时间:2023-10-30 03:21:18 25 4
gpt4 key购买 nike

我曾经像这样将 NSError 转换为 CFErrorRef 并在 SMJobBless 中使用它

NSError *error
BOOL removed = SMJobRemove(kSMDomainSystemLaunchd,
(CFStringRef) daemonBundleID,
auth,
true,
(CFErrorRef*) &error);
if (!removed) {
NSLog(@"Failed to remove existing PacketTool");
[NSApp presentError: error];
}

由于我在使用 ARC 时遇到错误,“ARC 不允许将间接指针转换为指向‘CFErrorRef’的 Obj-C 指针”,我更改并决定做相反的事情

CFErrorRef *cfError = nil;
BOOL blessed = SMJobBless(kSMDomainSystemLaunchd, (__bridge CFStringRef)daemonBundleID,
auth,
cfError);
if (!blessed) {
NSError *error = (__bridge NSError *)cfError;
NSLog(@"Failed to bless PacketTool: %@", error);
[NSApp presentError: error];
return FALSE;
}

现在我有一个“Incompatible types casting 'CFErrorRef' to NSError *” with __bridge cast

我能做什么?

更新:感谢 Greg,现在正确的代码是:

CFErrorRef cfError = nil;
BOOL blessed = SMJobBless(kSMDomainSystemLaunchd,
(__bridge CFStringRef) daemonBundleID,
auth,
&cfError);
if (!blessed) {
NSError *error = (__bridge NSError *)cfError;
NSLog(@"Failed to bless PacketTool: %@", error);
[NSApp presentError: error];
return FALSE;
}

最佳答案

当你声明 cfError 时你不应该使用指针 *,你应该使用:

CFErrorRef cfError = nil;
NSError *error = (__bridge NSError *)cfError;

换句话说,它是这样工作的:

NSError *error = nil;
CFErrorRef ref = (__bridge CFErrorRef) error;

希望这对您有所帮助。

关于objective-c - 使用 ARC 将 CFErrorRef 转换为 NSError(或相反),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20427104/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com