2013-08-19 14 views
7

UżywamJak serializować UIImage do JSON?

imageData = UIImagePNGRepresentation(imgvw.image);

i podczas księgowania

[dic setObject:imagedata forKey:@"image"]; 

po

NSData *data = [NSJSONSerialization dataWithJSONObject:dic options:NSJSONWritingPrettyPrinted error:&theError];

teraz aplikacja jest upaść Zakończenie aplikację spowodowane nieprzechwyconego wyjątku 'NSInvalidArgumentException', powód: "Niepoprawny typ w zapisie JSON (NSConcreteMutab leData)

+2

Spójrz tutaj -> http://www.json.org/ wydaje trzeba dowiedzieć się więcej o JSON, zanim spróbuje użyć to. Kluczową sekcją na tej stronie jest sekcja ** Wartości **. Spójrz na rodzaje wartości, które są dozwolone w standardzie JSON. – borrrden

+0

Co to jest obraz w ustawieniach słownika? –

+0

Jestem prawie pewien, że używasz niewłaściwego słownika. Gdzie umieściłeś słownik i co tu jest obraz? –

Odpowiedz

11

trzeba konwertować swoje UIImage do NSData a następnie przekonwertować NSData do NSString, który będzie łańcuchową reprezentacją twoich danych.

Po uzyskaniu NSString * od NSData *, można go dodać do słownika w kluczu @ „obraz”

Aby przekonwertować NSData do typu base64 NSString * zapoznać się z poniższego linku: How do I do base64 encoding on iphone-sdk?

bardziej pseudo sposób proces będzie wyglądać następująco

UIImage *my_image; //your image handle 
NSData *data_of_my_image = UIImagePNGRepresentation(my_image); 
NSString *base64StringOf_my_image = [data_of_my_image convertToBase64String]; 

//now you can add it to your dictionary 
NSMutableDictionary *dict = [NSMutableDictionary dictionary]; 
[dict setObject:base64StringOf_my_image forKey:@"image"]; 

if ([NSJSONSerialization isValidJSONObject:dict]) //perform a check 
{ 
     NSLog(@"valid object for JSON"); 
     NSError *error = nil; 
     NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:&error]; 


     if (error!=nil) { 
      NSLog(@"Error creating JSON Data = %@",error); 
     } 
     else{ 
      NSLog(@"JSON Data created successfully."); 
     } 
} 
else{ 
     NSLog(@"not a valid object for JSON"); 
    } 
+0

Dziękuję za pracę ... – user2181966

+0

miło znać to .. – CodenameLambda1

-3

można przekonwertować obraz w ti NSData jak: -

jeśli PNG

UIImage *image = [UIImage imageNamed:@"imageName.png"]; 
NSData *imageData = [NSData dataWithData:UIImagePNGRepresentation(image)]; 

jeśli JPG

UIImage *image = [UIImage imageNamed:@"imageName.jpg"]; 
NSData *imageData = UIImageJPEGRepresentation(image, 1.0); 

i można przechowywać to do CoreData może być w ten sposób użyteczne: -

[newManagedObject setValue:imageData forKey:@"image"]; 

można załadować jak: -

NSManagedObject *selectedObject = [[self yourFetchCOntroller] objectAtIndexPath:indexPath]; 
     UIImage *image = [UIImage imageWithData:[selectedObject valueForKey:@"image"]]; 
// and set this image in to your image View 
    yourimageView.image=image; 
+3

Tytuł pytania jest mylący. Pytanie brzmiało, jak przesłać obraz przez JSON. Nie widzę, jak pomaga tutaj zapisywanie obrazu w Core Data. –

4

Spróbuj

NSData *imageData = [UIImageJPEGRepresentation(self.photoImageView.image, compression) dataUsingEncoding:NSUTF8StringEncoding]; 

const unsigned char *bytes = [imageData bytes]; 
NSUInteger length = [imageData length]; 
NSMutableArray *byteArray = [NSMutableArray array]; 
for (NSUInteger i = 0; i length; i++) 
{ 
    [byteArray addObject:[NSNumber numberWithUnsignedChar:bytes[i]]]; 
} 

NSDictionary *dictJson = [NSDictionary dictionaryWithObjectsAndKeys: 
       byteArray, @"photo", 
       nil]; 
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dictJson options:0 error:NULL];