2012-02-14 4 views
3

catObras라는 엔티티 클래스가 있으며 NSManagedObject 클래스에서 상속받습니다. JSON 형식으로 웹 서비스 (POST)를 전달하고 싶습니다. 내가이 물건을 보낸다면 나는 이것을받습니다 :NSManagedObject to JSON

<catObras: 0x6d879f0> (entity: catObras; id: 0x6d859b0 <x-coredata://41B60B06-248C-488D-A14C-894E04D0395F/catObras/p2> ; data: { 
Reporte = "<relationship fault: 0x6d9dc40 'Reporte'>"; 
calendarioVisitas = "<relationship fault: 0x6dac2c0 'calendarioVisitas'>"; 
catFondosInversion = "<relationship fault: 0x6d7a1b0 'catFondosInversion'>"; 
contratista = nil; 
contrato = "XX-AYTO-ENS-BC-HABITAT-2011-IS-01"; 
descripcion = "AMPLIACION DE RED DE DRENAJE SANITARIO COL. VISTA HERMOSA"; 
direccion = nil; 
estatus = nil; 
fechaAprobacion = "2012-01-01 08:00:00 +0000"; 
fechaInicio = "2012-01-31 08:00:00 +0000"; 
fechaTerminacion = "2012-03-10 08:00:00 +0000"; 
fechaUltimoRep = nil; 
idAgrupacion = 0; 
idObra = 5; 
inversionAprobada = 0; 
inversionAutorizada = 1668000; 
inversionContratada = 834000; 
nota = asdasdasdasda; 
numeroControl = ""; 
obraPartidas = "<relationship fault: 0x6d7a1f0 'obraPartidas'>"; 
observaciones = "muestras 2"; 
oficioAprobacion = "SDS/122/11/1857 OF.001"; 
supervisor = nil;}) 

나는이 정보를 json 형식으로 전달하고자합니다. 지금은 SBJSON (일명 JSON 프레임 워크)을 사용하고 있습니다. JSONRepresentation을 사용하려고하면 다음 메시지가 나타납니다.

JSONRepresentation failed. 오류 : JSON의 유효하지 않은 유형

제안 사항?

답변

6

나는 SBJSON에 익숙하지 않지만 내 생각에 -JSONRepresentation은 임의의 객체가 아니라 NSDictionaries에서 호출 될 예정이다. 이 작업을 수행 할 수 있습니다 :

NSManagedObject *managedObject = ...; 
NSArray *keys = [NSArray arrayWithObjects:@"key1", @"key2", ..., nil]; // These are the keys for the properties of your managed object that you want in the JSON 
NSString *json = [[managedObject dictionaryWithValuesForKeys:keys] JSONRepresentation]; 

-dictionaryWithValuesForKeys: 방법은 documentation에 설명되어 있습니다. 중요한 것은 SBDON이 처리 할 수있는 NSDictionary를 반환한다는 것입니다. SBJSON이 처리 할 수있는 유형인지 확인하면서 NSManagedObject 하위 클래스의 각 속성 유형에주의해야합니다.

+0

예, NSDictionary를 사용하여 JSONRepresentation을 사용하려고 시도했지만이 "-JSONRepresentation이 실패했습니다. 오류 : JSON 직렬화가 __NSDate에서 지원되지 않습니다."( – Alex

+1

몇 가지 접근법이 있지만 가장 쉬운 방법은있을 수 있습니다. 당신의 NSManagedObject 서브 클래스에'-dateString'과 같은 이름의 새로운 메소드를 생성하는 것입니다.이 메소드에서 NSDateFormatter를 사용하여 날짜의 적절한 문자열 표현을 만든 다음'date' 대신 키 배열에'dateString'을 넣으십시오. –