0

FSCopyObjectAsync用来在 Cocoa 应用程序中复制文件。问题是,每当我尝试设置info字段(类型的对象void *)时,应用程序都会因为EXEC_BAD_ACCESS. 我不确定我做错了什么。

这是我的代码:

// Start the async copy.
FSFileOperationClientContext *clientContext = NULL;
if (spinner != nil) {
    clientContext->info = (__bridge void *)(spinner); // <- Problem here!
}

status = FSCopyObjectAsync(fileOp,
                           &source,
                           &destination, // Full path to destination dir.
                           CFSTR("boot.iso"), // Copy with the name boot.iso.
                           kFSFileOperationDefaultOptions,
                           copyStatusCallback,
                           0.5, // How often to fire our callback.
                           clientContext); // The progress bar that we want to use to update.

CFRelease(fileOp);

我正在使用 ARC,如果我注释掉处理的行clientContext并传入NULL的最后一个参数,它就可以工作FSCopyObjectAsync,但这会严重削弱我的应用程序的功能。因此,这绝对是作业造成的。

4

1 回答 1

1

您正在创建一个 NULL 指针而不分配它,然后尝试引用它。更改代码,以便在堆栈上分配它并传递它的地址,如下所示。

    // Start the async copy.
FSFileOperationClientContext clientContext;
if (spinner != nil) {
    clientContext.info = (__bridge void *)(spinner);
}

status = FSCopyObjectAsync(fileOp,
                           &source,
                           &destination, // Full path to destination dir.
                           CFSTR("boot.iso"), // Copy with the name boot.iso.
                           kFSFileOperationDefaultOptions,
                           copyStatusCallback,
                           0.5, // How often to fire our callback.
                           &clientContext); // The progress bar that we want to use to update.

CFRelease(fileOp);
于 2013-05-30T23:15:49.153 回答