最高投票数の回答は、辞書の配列またはその他のシリアル化可能なオブジェクトには有効ですが、カスタム オブジェクトには有効ではありません。
これが問題です。配列をループして、各オブジェクトの辞書表現を取得し、それを新しい配列に追加してシリアル化する必要があります。
NSString *offersJSONString = @"";
if(offers)
{
NSMutableArray *offersJSONArray = [NSMutableArray array];
for (Offer *offer in offers)
{
[offersJSONArray addObject:[offer dictionaryRepresentation]];
}
NSData *offersJSONData = [NSJSONSerialization dataWithJSONObject:offersJSONArray options:NSJSONWritingPrettyPrinted error:&error];
offersJSONString = [[NSString alloc] initWithData:offersJSONData encoding:NSUTF8StringEncoding] ;
}
Offer クラスの dictionaryRepresentation メソッドについては、次のようになります。
- (NSDictionary *)dictionaryRepresentation
{
NSMutableDictionary *mutableDict = [NSMutableDictionary dictionary];
[mutableDict setValue:self.title forKey:@"title"];
return [NSDictionary dictionaryWithDictionary:mutableDict];
}