2013-08-05 5 views
0

목표는 JSON으로 iphone에 sqlbinary를 보내는 웹 서비스를 통해 SQL Server에서 varbinary로 저장된 이미지를 가져 오는 것입니다. JSON에서 보낸 base64binary에서 UIImage를 설정하는 데 문제가 있습니다. NSData로 바이너리를 변환 할 수 있지만 이미지가 데이터를 통해 설정되지 않습니다.UIImage가 NSData에서 설정되지 않음

for (int i = 0; i < array.count; i++) { 
      NSDictionary *mealInfo = [array objectAtIndex:i]; 
      Meal *meal =[[Meal alloc]initWithRestaurant:[mealInfo objectForKey:@"restaurantname"] 
               mealName:[mealInfo objectForKey:@"itemname"] 
              description:[mealInfo objectForKey:@"itemdescription"] 
                Time:[mealInfo objectForKey:@"mealTime"] 
                price:[mealInfo objectForKey:@"itemprice"]]; 
      //NSString *str = @"data:image/jpg;base64,"; 
      //str = [str stringByAppendingString:[mealInfo objectForKey:@"itemImage"]]; 
      //NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:str]]; 

      NSString *str = [mealInfo objectForKey:@"itemImage"]; 
      NSLog(@"%@", str); 

      NSData *d = [[NSData alloc]initWithData:[NSData dataFromBase64String:str]]; 
      UIImage *image = [UIImage imageWithData:d]; 
      [meal setMealImage:image]; 

         [meals addObject:meal]; 

     } 
     NSLog(@"%@",[[meals objectAtIndex:0]mealPrice]); 
     NSLog(@"This is how many meals %d", meals.count); 

답변

0

인코딩 된 기본 64를 포함하는 문자열이 양호하다고 가정하면 코드는 정상적으로 보입니다. 그것이 dataFromBase64String 메서드에서 문제를 일으키는 지 확인할 것입니다.

-(NSData *)dataFromBase64EncodedString:(NSString *)string{ 
    if (string.length > 0) { 

     //the iPhone has base 64 decoding built in but not obviously. The trick is to 
     //create a data url that's base 64 encoded and ask an NSData to load it. 
     NSString *data64URLString = [NSString stringWithFormat:@"data:;base64,%@", string]; 
     NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:data64URLString]]; 
     return data; 
    } 
    return nil; 
} 

당신은 그것의 사용이 매우 편리하게하기 위해이 방법으로 NSData 카테고리를 추가 할 수 있습니다 여기에 내가 어떤 사람의 작업에 따라 사용할 버전입니다.