2013-01-23 3 views
1

코어 데이터에 추가 한 base64 디코딩 PNG 이미지가 포함 된 JSON이 있습니다. 내 핵심 데이터 모델에 바인딩하여 Image Wells에 해당 이미지를 표시하고 싶습니다.코어 데이터 바인딩이있는 Base64 png

Data은 (는) 더 이상 사용되지 않으므로 NSArchiveFromData과 (와) 사용할 수 없습니다.

내 문제는 this과 유사하지만 답변을 정말로 이해하지 못합니다.

누구나 아이디어가 있습니까?

감사합니다.

답변

1

는 (당신은 단지 속성에 바인딩을 사용하거나 NSArrayController를 사용하는 경우 잘 모르겠어요 - 나는 두 시나리오에 대답하려고합니다) 이것의 효과에 뭔가를 시도 당신이 걸릴 수

을 당신의 JSON에서 문자열과 그것을 디코딩 : (당신은 유래 대답에 참조 된 오픈 소스 라이브러리가 필요합니다 https://stackoverflow.com/questions/14260936/decode-an-encoded-base64-image-in-c-sharp-in-objective-c를)

NSString *jsonImage = [jsonData [email protected]"image"]; 
NSData *data  = [NSData dataWithBase64EncodedString:jsonImage]; 

그런 다음 데이터와 이미지를 초기화하기.

코어 데이터를 관리하기 위해 NSArrayController를 사용하는 경우 이미지를 반환하는 값 변환기를 만듭니다.

NSValueTransformer의 하위 클래스를 만들고 원하는 이름을 지정하십시오. 구현에 추가 :

+(Class)transformedValueClass { 
    return [NSImage class]; 
} 
-(id)transformedValue:(id)value { 
    if (value == nil) { 
     return nil; 
    } else { 
     NSData *data = [NSData dataWithBase64EncodedString:value]; //might be [value stringValue] 
     return [[NSImage alloc] initWithData:data]; 
    } 
} 

그런 다음 이미지에 바인딩을 설정 한 인터페이스 빌더에서, 당신이 만든 클래스에 값 변압기를 설정합니다.

+0

감사! 내가 그것을 할 시간이 있으면 곧 그것을 구현할 것이다 (그것은 나중에 밤이 될 것이다). 그리고 네, NSArrayController를 사용합니다.그것을 시도 할 것이고, 그 다음 당신은 현금으로 넣을 수있다 :) – Mikael

+0

신용은 꽤 낭비했다! 고맙습니다! – Mikael

+0

다행입니다! – macandyp

0

정확히 무엇이 문제인지 정의하지 않았습니다.

NSData에서 NSImage를로드하려면 Apple docsinitWithData:을 참조하십시오.

@class MyObject : NSManagedObject 

@property NSData *imageData; 

@end 

과 구현의 :

-(NSImage *)bindableImage { 
    [self willAccessValueForKey:@"bindableImage"]; 
    NSImage *myImage = [[NSImage alloc] initWithData:[self imageData]]; 
    [self didAccessValueForKey:@"bindableImage"]; 
    return myImage; 
} 

: 해 새로운 속성을 추가, 지금

@implementation MyObject 

@dynamic imageData; 

@end 


의 당신은 핵심 데이터 객체가 있다고 가정 해 봅시다 또한 이미지 바인딩시 바인딩 변경을 알립니다. 데이터 속성이 변경되었습니다.

+ (NSSet *)keyPathsForValuesAffectingImageData { 
    return [NSSet setWithObjects:@"bindableImage", nil]; 
} 

그게 전부입니다. 내 생각 엔 작동해야하지만 시도하지 않았다. :)


다른 답변을 확인해보십시오.

+0

문제는 바인딩으로이 작업을 수행하고 Base64로 인코딩 된 이미지로 그 작업을 수행하는 방법을 모른다는 것입니다. – Mikael