【问题标题】:NSManagedObject to JSONNSManagedObject 到 JSON
【发布时间】:2012-02-14 19:11:56
【问题描述】:

我有一个名为 catObras 的实体类,它继承自 NSManagedObject 类。我想要做的是以 JSON 形式通过 Web 服务 (POST) 传递它。如果我发送了对象,我会收到:

<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 时,它会向我发送以下信息:

JSON 表示失败。错误是:JSON 类型无效

有什么建议吗?

【问题讨论】:

    标签: iphone objective-c json nsmanagedobject sbjson


    【解决方案1】:

    我不熟悉 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 中进行了描述。重要的是它返回一个 NSDictionary,SBJSON 可能可以处理它。您需要注意 NSManagedObject 子类中每个属性的类型,确保它们属于 SBJSON 可以处理的类型。

    【讨论】:

    • 是的,我用信息制作了一个 NSDictionary,尝试使用 de JSONRepresentation 但我得到这个“-JSONRepresentation 失败。错误是:__NSDate 不支持 JSON 序列化”:(
    • 有几种方法,但也许最简单的方法是在您的 NSManagedObject 子类上创建一个新方法,称为 -dateString。在该方法中,使用 NSDateFormatter 创建正确的日期字符串表示形式。然后将 dateString 放入您的键数组中,而不是 date
    猜你喜欢
    • 2015-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多