我刚刚开始在这个古怪的编程世界中,我遇到了一个非常令人沮丧的问题:
我正在尝试使用磁盘仲裁框架将所有磁盘放入一个数组中。
#import "DiskDetector.h"
#import "Disk.h"
@implementation DiskDetector
-(id)init {
self.arrayOfDisks = [[NSMutableArray alloc]init];
DASessionRef session;
session = DASessionCreate(kCFAllocatorDefault);
DARegisterDiskAppearedCallback(session, kDADiskDescriptionMatchVolumeMountable,diskAppearedCallback,NULL);
DARegisterDiskDisappearedCallback(session,kDADiskDescriptionMatchVolumeMountable, diskDisappearedCallback, NULL);
DASessionScheduleWithRunLoop(session, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode);
return self;
}
-(void)addToArrayOfDisks:(Disk*)disk {
}
void diskAppearedCallback(DADiskRef disk, void* context)
{
Disk *theDisk = [[Disk alloc]initWithNewDisk:disk];
NSLog(@"Disk Name: %@",theDisk.diskName);
NSLog(@"Disk Number: %@",theDisk.diskBSDName);
NSLog(@"Disk Connection Type: %@",theDisk.diskConnection);
NSLog(@"Disk Capacity in Bytes: %@",theDisk.diskTotalCapacityInBytes);
NSLog(@"Volume Name: %@",theDisk.partitionScheme);
//How Do I return "theDisk" from this function?
//[self.arrayOfDisks addObject:theDisk] does not work...complier has problem with use of "self"
}
void diskDisappearedCallback(DADiskRef disk, void* context)
{
NSLog(@"%s was ejected", DADiskGetBSDName(disk));
}
@end
如您所见,一切正常。问题是我想以某种方式返回“theDisk”对象所以我可以使用它。
由于回调函数是无效的,我不能做一个返回语句。如果我尝试修改函数的返回类型,DARegisterDiskAppearedCallback 函数将无法完全工作。
同样,我在这里的唯一目标是获取有关计算机上所有磁盘和分区的信息并将它们放入一个数组中,以便我可以获取有关它们的信息并对其进行操作。
另外,任何人都可以解释何时将某些内容放入回调函数的“(void *)context”中?Apple文档对此非常模糊......或者我可能完全错过了一些东西