Это потому, что ваш класс "Menu" не сериализуем в JSON.По сути, язык не знает, как ваш объект должен быть представлен в JSON (какие поля включать, как представлять ссылки на другие объекты ...)
Из ссылки на класс NSJSONSerialization
Объект, который может быть преобразован в JSON, должен иметь следующие свойства:
- Объект верхнего уровня - это NSArray или NSDictionary.
- Все объекты являются экземплярами NSString, NSNumber, NSArray, NSDictionary или NSNull.
- Все ключи словаря являются экземплярами NSString.
- Числа не являются NaN или бесконечностью.
Это означает, что язык знает, как сериализовать словари.Таким образом, простой способ получить представление JSON из вашего меню - предоставить представление ваших экземпляров Menu в словаре, которое затем сериализовать в JSON:
- (NSDictionary *)dictionaryFromMenu:(Menu)menu {
[NSDictionary dictionaryWithObjectsAndKeys:[menu.dateUpdated description],@"dateUpdated",
menu.categoryId, @"categoryId",
//... add all the Menu properties you want to include here
nil];
}
И вы можете использовать его следующим образом:
NSDictionary *menuDictionary = [self dictionaryFromMenu:[[DataStore singleton] getHomeMenu]];
NSError *err;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:menuDictionary options:NSJSONWritingPrettyPrinted error:&err];
NSLog(@"JSON = %@", [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]);