您好,我正在使用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));
}它记录得很好,但是我怎样才能返回数组呢?它只是循环,所以我甚至不知道如何检查它是否完成。
发布于 2012-08-02 02:35:41
您可以更改您的方法并将数组存储在私有变量中:
(void*) driveGo(DADiskRef disk, void *context) {
NSLog(@"%s", DADiskGetBSDName(disk));
self->_myArray = DADiskGetBSDName(disk);}
发布于 2013-12-20 05:47:11
它只是循环,所以我甚至不知道如何检查它是不是完成了。
没有“完成”这个词。对于DiskArb当前已知的每个“磁盘”以及此后出现的每个“磁盘”,您的回调都将被调用。两者之间没有任何区别。
大多数应用程序都应该使用它,而不是反对它。让DiskArb告诉您新的“磁盘”出现、更改(DescriptionChanged)、挂载或卸载(也包括DescriptionChanged)或消失的时刻。当这些更改生效时,请保持您的信息为最新,并始终保持当前状态。
大多数应用程序不需要获取当前已装入卷集的完整且固定的快照。但是,如果出于某种原因,您可能会尝试使用getmntinfo函数。
https://stackoverflow.com/questions/11765367
复制相似问题