2011-04-23 52 views
0

我有一個plist文件,其中包含jpeg照片數據。我需要把那張照片拿出來。我可以將plist文件讀入NSDictionary,並可以通過鍵「jpegphoto」訪問該對象。問題是返回的對象是一個NSCFArray,我不知道如何使用。我可以打印它,並且我看到一串不錯的八位字節出來,但這就是我所知道的。我如何獲得NSCFArray到NSData或字節數組?CFArray到NSData到NSImage

的CFArray傳遞給NSLog的,像這樣

NSLog(@"%@", [plistDictionary objectForKey:@"jpegphoto"]); 

時吐出了數百個類似的一行到

5ed15ee6 df44b2ff 00899699 0dd23b58 dccdcadc 6c8d04e1 8b3e1940 af76953e 7c0e1b56 

我知道這是一個CFArray B/C我沒有

NSLog(@"%@", NSStringFromClass([[data_dictionary objectForKey:@"jpegphoto"] class])); 

又回來了

NSCFArray 

感謝

+0

NSCFArray == ==的NSArray CFArrayRef。 – kennytm 2011-04-23 08:23:19

回答

0

所有我能想到的把我的頭頂部會是這樣:

NSArray * array = [ data_dictionary valueForKey:@"jpegphoto" ] ; 
NSMutableData * data = [ NSMutableData dataWithCapacity:array.count * 4 ] ; 
uint32_t * dataPtr = [ data mutableBytePtr ] ; 
NSUInteger index = 0 ; 
for(NSNumber * number in array) 
{ 
    dataPtr[ index++ ] = [ number unsignedLongValue ] ; 
} 

假設數組已滿CF/NSNumber的實例。 如果它是原語(非對象)值的CFArray,嘗試這樣的事情:

CFArrayRef array = (CFArrayRef)[ data_dictionary valueForKey:@"jpegphoto" ] ; 
CFDataRef data = CFDataCreateMutable(kCFAllocatorDefault, CFArrayGetCount(array) * 4) ; 
CFArrayGetValues(array, (CFRange){ 0, CFArrayGetCount(array) }, (void**)CFDataGetMutableBytePtr(data)) ; 
+0

在這兩種情況下,您的數據都處於「數據」狀態。 (NS/CF數據) – nielsbot 2011-04-23 07:11:15