2015-01-10 4 views
0

У меня есть довольно общий вопрос. Я сделал приложение, которое использует большой список слов. Эти слова хранятся в текстовом файле вместе с исходным кодом. При первом запуске приложения я заполняю объект данных словами из текстового файла. Этот объект данных затем используется для каждого нового запуска, поскольку он является постоянным, и текстовый файл больше никогда не используется.Хранить данные настойчиво в приложении iOS

Я считаю это решение немного странным, если честно. Возможно ли предустановить/предварительно скомпилировать такой объект данных с помощью встроенной функциональности iOS? Я думаю о том, что имеет файл .sqlite, который уже имеет все данные, хранящиеся в нем при первом запуске, как и на любом другом языке, с которым я работал.

Все ответы приветствуются!

+0

Существует десяток способов справиться с этим, но все это потребует хранения данных * где-то * между выполнением приложений. Наличие SQLite-файла в вашем пакете - это совершенно правильный подход, например, и есть десятки примеров того, как это сделать (хотя, возможно, и не в Swift) здесь, на SO, если вы посмотрите. –

ответ

-1

Я рекомендую вам использовать NSUserDefaults. Вы должны хранить NSArray или NSDictionary со значениями, которые вам нужны. На вашем - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions, вы можете добавить:

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; 
if([userDefaults objectForKey:@"wordsData"] == nil){ 
    //This means this is the first time the user opens the app. Create defaults. 
    //Create a dictionary or an array with the words. 
    NSDictionary *wordsDictionary = <my dictionary>; 
    [userDefaults setObject:wordsDictionary forKey:@"wordsData"]; 
    [userDefaults synchronise]; 
} 

Затем, когда вам нужно получить их, используйте:

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; 
NSDictionary *wordsDictionary = [defaults objectForKey:@"wordsData"]; 

Если вам нужно больше NSUserDefaults, читайте the Apple docs regarding NSUserDefaults. Примечание: NSUserDefaults не имеет ограничений, но вы не должны сохранять там более 512 Кбайт данных. Если вам нужно гораздо больше этого, вы должны с нетерпением ждать NSBundle или других типов хранения. Данные, хранящиеся на NSUserDefaults, отправляются в файл .plist, поэтому он не должен быть слишком большим.

С наилучшими пожеланиями,

+0

Я не ответил на этот вопрос, но думаю, что данные такого рода в NSUserDefaults ** не идеальны, потому что наличие их в виде массива или словаря потребует, чтобы вы прочитали весь список во время загрузки. Это увеличит время загрузки вашего приложения раньше, чем вы думаете. NSUserDefaults следует использовать, как следует из названия, для настроек, предпочтений, флагов, обычно дешевых/мелких вещей. – nacho4d

+0

Я согласен с Nacho. Лучше избегать хранения больших наборов данных в пользовательских настройках по умолчанию.Другой вариант, такой как plist, файл, созданный с использованием NSCoding, или база данных SQL, будет лучшим выбором. –

1

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

Что я сделал, так это создать программу Mac, которая откроет текстовый файл, преобразует его в массив и затем сохранит массив как двоичный файл двоичный. Двоичные пластины быстрее и эффективнее, чем текстовые плиты. Затем я добавляю plist в свой проект iOS, и это то, что я читал при запуске.

Вы можете так же легко сделать преобразование из проекта iOS.

Посмотрите на класс NSPropertyListSerialization для информации о создании бинарного PLIST, и, в частности значение kCFPropertyListBinaryFormat_v1_0 для параметра метода -dataWithPropertyList:format:options:error:format.

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

+0

Второе предложение двоичного plist. PLists - хороший способ пойти на то, что вы хотите сделать, потому что они редактируются с помощью текстового редактора, а когда вы конвертируете их в двоичные файлы, ваша операция ускоряется еще больше. – JaredH

+1

Текстовые плиты не очень быстрые, но бинарные пластинки являются быстрыми и эффективными с точки зрения памяти. Довольно легко использовать объект «NSPropertyListSerialization», как было предложено, и указать формат «NSPropertyListXMLFormat_v1_0» во время тестирования, а затем переключиться на двоичный формат «NSPropertyListBinaryFormat_v1_0», как только вы убедитесь, что все работает, для экономии на обоих дисковых пространствах (большой) и производительности. –

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