您好我使用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));
}
它记录得很好,但我怎样才能返回数组? 它只是循环所以我甚至不知道如何检查它是否完成。
答案 0 :(得分:0)
您可以更改方法并将数组存储在私有变量中:
(void*) driveGo(DADiskRef disk, void *context) {
NSLog(@"%s", DADiskGetBSDName(disk));
self->_myArray = DADiskGetBSDName(disk);
}
答案 1 :(得分:0)
它只是循环所以我甚至不知道如何检查是否已完成。
没有“完成”。您的回调将针对DiskArb 当前已知的每个“磁盘”和从那时出现的每个“磁盘”进行调用。两者之间没有分离。
大多数应用程序应该使用它,而不是反对它。让DiskArb告诉您新的“磁盘”出现,更改(DescriptionChanged),安装或卸载(也是DescriptionChanged)或消失的时刻。随着这些变化的到来,让您的信息保持最新,并始终保持当前状态。
大多数应用程序不需要获取当前已安装卷集的完整且固定的快照。但是,如果出于某种原因,您可以尝试使用getmntinfo
函数。