2011-05-14 22 views
37

¿Cuál es el código más fácil y más rápido para hacer una conversión entre NSData y una cadena base64? He leído un montón de soluciones en SO y sobre todo implican agregar otra clase, etc. Encontré una gran solución here pero es demasiado compleja.Convirtiendo entre cadenas NSData y base64

+6

Todas las soluciones razonables se parecerán a la publicación de Matt Gallagher a la que se vinculó. –

+0

Aquí encontrarás la biblioteca de Gallagher donde la gente ha usado misteriosamente '[NSData dataFromBase64String]' sin vincular – bobobobo

+0

Por algún motivo incomprensible Apple nunca ha brindado soporte "nativo" para Base64, pero todos los kits de terceros son prácticamente idénticos. Solo elige uno. –

Respuesta

53

Desplácese hasta la sección Conclusión sección en the page you linked y download the provided NSData+Base64 files. Es la mejor solución que he visto hasta ahora y es increíblemente fácil de usar. Si puede aprender algo sobre Cocoa, puede aprender a usar ese proyecto.


Ejemplo

NSString *originalString = [NSString stringWithFormat:@"test"]; 
NSData *data = [NSData dataFromBase64String:originalString]; 
NSLog([data base64EncodedString]); 

Lo anterior imprimir la cadena original después de la conversión a base64 y de vuelta a una cadena sin codificar normal.

+2

He descargado los dos, entonces ¿necesito agregar ese proyecto a mi o puedo simplemente arrastrar NSData + Base64? – aherlambang

+2

Quiere agregar los dos archivos a su proyecto. Generalmente, cuando ve nombres como 'NSData + Base64', lo primero que debe pasar por su cabeza es que esta es una categoría de la clase' NSData'. En otras palabras, solo llama a estos nuevos métodos usando 'NSData', no una nueva clase' Base64'. –

+1

Creo, sin embargo, que aún necesita importar la categoría. Personalmente, recomendaría ponerlo en su encabezado precompilado para que pueda usar los métodos en 'NSData' desde cualquier lugar de su proyecto. –

1

Terminé usando esta misma clase que proporciona SUDZC

aplicación fue fácil primero que hice una importación

#import "NSData+Base64.h" 

entonces yo era capaz de llamar a mis datos.

+0

Todo lo que obtengo es archivo 'NSData + Base64.h' no encontrado. – Martin

+1

@Martin Utilicé las clases generadas por [sudzc] (http://www.sudzc.com) lib, crea esta clase para usted que luego puede importar en su archivo de implementación (.m) – SeeCoolGuy

0

O usted puede echar un vistazo a la (bastante nuevo) proyecto de ejemplo CryptoCompatibility, creo que hay una clase de contenedor para la operación base 64. Es una muestra de MacOS, pero utiliza la biblioteca libresolve.dylib con la que creo que también está disponible en iOS (es verla al menos aquí en iOS7).

40

A partir de iOS 7, NSData ahora proporciona directamente esta funcionalidad con los nuevos métodos -base64EncodedDataWithOptions: y -base64EncodedStringWithOptions:. (Las opciones le permiten especificar que la cadena es/debe estar en línea, mejor para tratar el correo electrónico y las pantallas orientadas al usuario.)

29

No necesita ninguna implementación personalizada. La creación de base64 desde NSData se muestra en otras respuestas. Hay una dirección opuesta. De cadena Base64 a NSData:

NSString *base64Encoded = @"some base64 string"; 
NSData *nsdataFromBase64String = [[NSData alloc] initWithBase64EncodedString:base64Encoded options:0]; 
+6

Esto fue agregado en iOS 7/OSX 10.9 y es la mejor solución que se ofrece aquí. [Documentación aquí] (https://developer.apple.com/library/ios/documentation/cocoa/Reference/Foundation/Classes/NSData_Class/index.html#//apple_ref/occ/instm/NSData/initWithBase64EncodedString:options :) . – jonstaff

+0

Esa debería ser la respuesta aceptada ... – csblo

+0

Acepto que esta debería ser la respuesta aceptada. – Wayne

Cuestiones relacionadas