1

我是 JSON 格式的新手,但它看起来非常适合我正在尝试的内容。我需要一个自定义NSObject(食谱)并通过电子邮件中的 URL 字符串发送。然后收件人将在我的应用程序中打开链接并解析 URL。

我现有的实现从配方的详细信息手动构建一个字符串,并在另一端对其进行解码。我更喜欢使用更标准的东西,比如 JSON。

到目前为止,我已将以下方法添加到我的Recipe课程中:

- (NSData *)jsonRepresentation
{
    NSDictionary *dictionary = @{@"name":self.name,
                         @"instructions":self.instructions};
    NSError* error;
    return [NSJSONSerialization dataWithJSONObject:dictionary
                                           options:NSJSONWritingPrettyPrinted
                                             error:&error];
}

我可以NSData使用以下方法成功记录此对象:

 [[NSString alloc]initWithData:recipe.jsonRepresentation
                      encoding:NSUTF8StringEncoding];

但是,我还不能添加我的成分列表(一个NSArray)。我试图简单地使用它:

NSDictionary *dictionary = @{ @"name" : self.name,
                      @"instructions" : self.instructions,
                       @"ingredients" : self.orderedIngredients };

但在记录时,我收到此错误:

Invalid type in JSON write (Ingredient)

如您所知,我对此很陌生。

ingredients在将数组添加到字典之前,我是否打算对数组做一些事情?

4

2 回答 2

3

尝试这个:

NSDictionary *dictionary = @{ @"name" : self.name,
                      @"instructions" : self.instructions,
                       @"ingredients" : [self.orderedIngredients valueForKey:@"name"] };

假设这self.orderedIngredients是一个包含对象的数组,ingredients并且其中ingredients有一个属性name

[self.orderedIngredients valueForKey:@"name"]

将返回所有名称的数组。

于 2013-01-14T20:03:56.247 回答
1

如果您的成分数组列表包含自定义类对象,您应该为该类创建一个序列化程序。

于 2013-01-14T19:55:24.340 回答