0

您好我正在使用 DiskArbitration.framework 来获取磁盘列表

+(NSArray*)arrayOfDisks {
    DASessionRef session = DASessionCreate(kCFAllocatorDefault);
    if (session) {
        DARegisterDiskAppearedCallback(session, NULL, driveGo, NULL);
        DASessionScheduleWithRunLoop(session,
                                     CFRunLoopGetCurrent(), kCFRunLoopDefaultMode);
        CFRelease(session);
    }
    return nil;
}

void driveGo(DADiskRef disk, void *context) {
    NSLog(@"%s", DADiskGetBSDName(disk));
}

它记录得很好,但是我怎样才能返回数组呢?它只是循环,所以我什至不知道如何检查它是否完成。

4

2 回答 2

0

您可以更改方法并将数组存储在私有变量中:

(void*) driveGo(DADiskRef disk, void *context) {
NSLog(@"%s", DADiskGetBSDName(disk));
self->_myArray = DADiskGetBSDName(disk);

}

于 2012-08-01T18:35:40.510 回答
0

它只是循环,所以我什至不知道如何检查它是否完成。

没有“完成”。将为 DiskArb 当前已知的每个“磁盘”以及此后出现的每个“磁盘”调用您的回调。两者之间没有分离。

大多数应用程序应该使用它,而不是反对它。让 DiskArb 告诉您新“磁盘”出现、更改 (DescriptionChanged)、安装或卸载 (也是 DescriptionChanged) 或消失的时刻。随着这些变化的出现,让您的信息保持最新,并始终保持当前状态。

大多数应用程序不需要获取当前已安装卷集的完整且固定的快照。但是,如果出于某种原因,您这样做了,您可能会尝试使用该getmntinfo功能。

于 2013-12-19T21:47:11.373 回答