2011-04-23 49 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