Ошибка NSJSONSerialization?

Была попытка отладить сбой в течение последних 10 часов и, наконец, я упростил его до этого кода:

NSError *error = nil;
NSData *data = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"payload" ofType:@"txt"]];
id obj = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error];

С NSZombieEnabled это приводит к сбою приложения в третьей строке (где происходит синтаксический анализ), и он регистрируется:

*** -[CFString retain]: message sent to deallocated instance 0x758afa0

Содержимое payload.txt:

[
   {
      "created_at":"2013-02-15T23:46:02-05:00",
      "description":"Take out the Big Gun sounded simple enough, except the Strogg were waiting. You, and a few marines like you, are the lucky ones. You've made it down in one piece and are still able to contact the fleet. The Gravity Well, the Strogg newest weapon in its arsenal against mankind, is operational. With the fleet around Stroggos, 5% of ground forces surviving, and that number dwindling by the second, your orders have changed: free your comrades. Destroy the Gravity Well.Minimum: A 100% Windows XP/Vista-compatible computer system",
      "developer":"id Software",
      "external_id":"2340",
      "id":745,
      "image":"http://cdn.steampowered.com/v/gfx/apps/2340/header_292x136.jpg",
      "is_subscribed":0,
      "link":"http://store.steampowered.com/app/2340/",
      "price":"4.99",
      "seller_id":2,
      "thumb":"http://media.steampowered.com/steamcommunity/public/images/apps/2340/5bd6e22ffdf72fdfb5ce2092fa50150de5fbb56f.jpg",
      "title":"Quake II: Ground Zero",
      "updated_at":"2013-02-15T23:46:02-05:00",
      "is_subscribed":0
   },
   {
      "created_at":"2013-02-15T23:45:59-05:00",
      "description":"Rage through 32 single player levels and 6 deathmatch levels of sheer terror and fully immersive sound and lighting. Arm yourself against the cannibalistic Ogre, fiendish Vore and indestructible Schambler using lethal nails, fierce Thunderbolts and abominable Rocket and Grenade Launchers.Minimum: A 100% Windows XP/Vista-compatible computer system",
      "developer":"id Software",
      "external_id":"2310",
      "id":742,
      "image":"http://cdn.steampowered.com/v/gfx/apps/2310/header_292x136.jpg",
      "is_subscribed":0,
      "link":"http://store.steampowered.com/app/2310/",
      "price":"9.99",
      "seller_id":2,
      "thumb":"http://media.steampowered.com/steamcommunity/public/images/apps/2310/e5bdf8dc7759c573fe525d45b69011f6a173a984.jpg",
      "title":"Quake",
      "updated_at":"2013-02-15T23:45:59-05:00",
      "is_subscribed":0
   }
]

Это всего лишь массив из 2 словарей. Я не уверен, что вызывает этот крах/что не так с этим JSON.

ОБНОВЛЕНИЕ Удаление "is_subscribed":0 в первом объекте массива избавляется от сбоя.

Ответ 1

Похоже, что Apple плохо работала над обработкой ошибок в таких случаях в своем классе, так как вы получаете сбой вместо нормального значения nil и переменной переменной. Ваши данные json и минималистический код - это то, что Apple обычно требует для отчета об ошибках. Сообщите об ошибке по следующей ссылке: https://developer.apple.com/bugreporter/ не забудьте приложить проект в zip как доказательство его сбоя.

Ответ 2

У меня была эта проблема, и для меня проблема была дублирующим ключом в JSON. Мой ключ был назван по-разному - не "is_subscribed", как в вашем случае, а "food_nutrients". Я готов поспорить, что iOS 6 сбой на любых дублированных ключах, где есть еще один ключ между ними - не просто ключ "is_subscribed", как предлагают некоторые из комментариев.

Я подтвердил, что дубликаты ключей любого имени являются проблемой. Связано: fooobar.com/info/443143/...