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

标签 objective-c cocoa automatic-ref-counting

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

相关文章:

ruby - RubyCocoa 应用程序中的 NULL?

ios - UITableView 滑动手势需要近乎完美的精度

macos - 让我的应用程序在启动时启动网络卷

iphone - 核心数据: inserting Objects crashed in global queue [ARC - iPhone simulator 6. 1]

objective-c - 启用 ARC 的设备上的 iOS 崩溃

ios - 在 ios swift 中导航到其他屏幕时,不鼓励在分离的 View Controller 上呈现 View Controller

objective-c - uitableviewcell 分隔符在 ios 8 中移动

ios - 在 UIViewController View 上对 subview 进行动画处理

objective-c - 为什么我的应用程序在迁移到 ARC 后充满了内存泄漏?

iphone - 在 iOS 中使用 AVFoundation 暂停和恢复同一文件的视频捕获