我曾经像这样将 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/