2015-07-15 2 views
2

Прямо сейчас у меня есть JSON-файл, который составляет около 30 МБ, файл в формате JSON является словарем в формате:Более эффективный способ загрузки и извлечения файла JSON в swift?

{"chinesePhrase":[ 
{"traditional": "21三體綜合症", "simplified": "21三体综合症","pinyinRead": "èr shí yī sān tǐ zōng hé zhèng", "pinyinType": "er4 shi2 yi1 san1 ti3 zong1 he2 zheng4", "definition": ["trisomy","Downs syndrome"]},... 
]} 

Каждая запись затем поместить в ячейку таблицы, и есть панель поиска для пользователей для поиска того, что они хотят, а затем, когда выбрано, сохраняется в CoreData.

Мой вопрос:
Каждый раз, когда я открываю приложение, он должен повторно разбить файл JSON для заполнения ячеек таблицы; есть ли лучший способ сделать это, чтобы файл JSON не нужно повторно анализировать каждый раз, когда открывается контроллер вида, в котором есть все словарные записи?

+0

«Если вы можете воссоздать эти значения во время выполнения (загружая из Интернета, делая вычисления, что угодно), то NSCache может удовлетворить ваши потребности. Если данные нельзя воссоздать (например, это пользовательский ввод, он чувствителен к времени, и т. д.), тогда вы не должны хранить его в NSCache, потому что он будет уничтожен там ». Джонатан в этом ответе: http://stackoverflow.com/a/5756162/2714702 – Vizllx

+2

Почему бы просто не разобрать его один раз и не хранить в' CoreData', тогда вы можете достичь таких вещей, как ленивые данные загрузки для вашего «TableView», а также позволить пользователям выполнять поиск по данным «CoreData»? – sbarow

ответ

3

Вы можете попробовать это. В разделе appdelegate "applicationDidBecomeActive". Проверьте, является ли это первоначальным запуском приложения. Если да, проанализируйте данные JSON.

Затем, если синтаксический анализ JSON был успешно установлен, NSUserDefault указывает это и сохраняет данные в CoreData. Или что вам нужно делать.

func applicationDidBecomeActive(application: UIApplication) { 

    let firstLaunch = NSUserDefaults.standardUserDefaults().boolForKey("FirstLaunch") 
    if firstLaunch { 
     println("Not first launch.") 

    } 
    else { 

     //Parse the JSON file here. 

      //if success set NSUserDefault 
      NSUserDefaults.standardUserDefaults().setBool(true, forKey: "FirstLaunch") 

     //if success, store data in CoreData. 

    } 
    } 

Если вы хотите обновлять данные каждый раз, когда приложение запущено. Допустим, вы добавили/отредактировали данные и хотели, чтобы пользователь получал эти новые обновленные данные во время следующего запуска. Вам нужно будет удалить настройки NSUserDefault и логику firstLaunch. И просто проанализируйте файл JSON и сохраните его в CoreData.

Затем, когда вам нужно было отображать данные в вашем TableView, вы можете просто просто извлечь его из CoreData.

+0

Как вы узнали, где вы получаете эту информацию? Я знаю, что это из быстрой документации, но откуда вы узнали, что эта функция существует? Мне очень тяжело пытаться научиться самому Свифта, и мне было интересно, что это лучший способ? Должен ли я просто изучать документацию? – YellowPillow

+0

Мне было очень полезно прочитать документы Apple несколько раз. Я, как правило, читаю его на автобусе/трамвае/crapper. Ожидание друзей и т. Д. Обычно, когда у меня есть несколько минут. Я открываю свой Iphone и читаю раздел/раздел или два. Вы найдете, когда идете ... делегаты - ваш друг. :) Сделайте несколько онлайн-руководств по youtube, это поможет вам много. Они даже не должны быть для приложения, которое вас интересует. Но каждый из них покажет вам что-то новое. Goodluck и счастливое кодирование! –

+1

Какой из них вы читаете, можете ли вы предоставить мне ссылку? Я не думаю, что я читаю правильный, как о переменных и классах и т. Д. – YellowPillow

Смежные вопросы