2010-09-27 11 views
18

Jak przekonwertować CFDataRef na NSData?Jak przekonwertować CFDataRef na NSData?

Mam CFDataRef i chcę go przekonwertować na NSData. Nie rozumiem, jak to zrobić.

ktoś mi pomóc ..

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]; 

Kiedy typecast (NSData * data1 = (NSData *)data) to Obrazu uszkodzone.

+1

Myślę, że masz na myśli CFDataRef. Nie mogę znaleźć żadnych odniesień do CGDataRef w dokumentacji Apple. –

Odpowiedz

27

Jest to bezpłatny mostek, więc po prostu trzeba go rzucić.

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

yes its CFDataRef, przepraszam. Chcę zapisać CGImage. –

+4

to nie będzie dozwolone w ARC. –

+1

Wystarczy dodać odpowiednie słowo kluczowe własności. Zobacz https://developer.apple.com/library/ios/releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html#//apple_ref/doc/uid/TP40011226-CH1-SW3 i http: //www.mikeash .com/pyblog/friday-qa-2011-09-30-automatic-reference-counting.html (poszukaj opcji "Mostkowanie bez opłat"), aby uzyskać szczegółowe informacje. –

11

Jak powiedział @KrisMarkel, po prostu trzeba przenieść prawo własności do SM tak:

Podobnie jak przeniesienie własności:

NSData* data1 = (__bridge_transfer NSData*) data; 

jeszcze użyć referencyjnych bez przeniesienia własności:

NSData* data2 = (__bridge NSData*) data;