2012-08-01 62 views
0

嗨,我是用DiskArbitration.framework獲得磁盤列表可可得到磁盤的NSArray

+(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

你可以改變你的方法和陣列存儲在私有變量:

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

}

+0

我不能回盤怎麼把它不arrayOfDisks方法存在的,無效driveGo看起來像呼叫幾次,所以不能退貨也 – user840250 2012-08-01 18:46:39

+0

DARegisterDiskAppearedCallback應該使用無效:( 我在嘗試讓所有磁盤的NSArray我的可可應用程序 – user840250 2012-08-01 18:55:44

0

它只是循環,所以我甚至不知道如何檢查是做或不該。

沒有「完成」。每一個「磁盤」都會被調用,每個「磁盤」目前都是DiskArb 。兩者之間沒有分離。

大多數應用程序應該可以使用它,而不是反對它。讓DiskArb告訴你出現新的「磁盤」,更改(DescriptionChanged),掛載或卸載(還有DescriptionChanged)或消失。隨着這些變化進入,讓您的信息保持最新,並始終保持當前狀態。

大多數應用程序不需要獲取當前已安裝卷集的完整和固定快照。但是,如果出於某種原因,您可以嘗試使用getmntinfo函數。