2010-09-27 13 views
18

Cómo convertir CFDataRef en NSData?Cómo convertir CFDataRef en NSData?

Tengo CFDataRef y quiero convertirlo en NSData. No entiendo cómo hacer esto.

alguien me ayude ..

CGDataProviderRef dataProvider = CGImageGetDataProvider(screenShot); 
    CFDataRef data = CGDataProviderCopyData(dataProvider); 
    CGDataProviderRelease(dataProvider); 
    NSString *imagePathLocation = [destinationPath stringByAppendingString:[@"/" stringByAppendingString:DesktopImage]]; 
    [[NSFileManager defaultManager]createFileAtPath: imagePathLocation contents:nil attributes:nil]; 
    fileHandleForImage = [NSFileHandle fileHandleForWritingAtPath:imagePathLocation]; 
    NSData * data1 = (NSData *)data; 
    [fileHandleForImage writeData:data1]; 

Cuando encasillado (NSData * data1 = (NSData *)data) que se corrompe imagen.

+1

Me refiero a CFDataRef. No puedo encontrar ninguna referencia a CGDataRef en la documentación de Apple. –

Respuesta

27

Tiene un puente de conexión gratuita, por lo que solo tiene que echarlo.

NSData *myData = (NSData *)myCFDataRef; 
+0

sí, es CFDataRef, lo siento. Quiero guardar CGImage. –

+4

esto no se permitirá en ARC. –

+1

Solo necesita agregar la palabra clave de propiedad apropiada. Ver https://developer.apple.com/library/ios/releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html#//apple_ref/doc/uid/TP40011226-CH1-SW3 y http: //www.mikeash .com/pyblog/friday-qa-2011-09-30-automatic-reference-counting.html (busque "Toll-Free Bridging") para más detalles. –

11

Como dijo @KrisMarkel, sólo hay que transferir la propiedad a ARC, así:

Al igual que para transferir la propiedad:

NSData* data1 = (__bridge_transfer NSData*) data; 

otra persona utilice la referencia sin transferir la propiedad:

NSData* data2 = (__bridge NSData*) data;