Основные данные и текстовые файлы в приложениях iOS - PullRequest
3 голосов
/ 13 мая 2011

Я создаю простое приложение для iOS, состоящее из нескольких UITableViewControllers. Информация, отображаемая в контроллерах представления, будет получена из текстового файла (который я включу в Ресурсы проекта). Содержимое текстового файла будет получено из электронной таблицы.

Поскольку я впервые работаю с Core Data, у меня есть несколько вопросов:

  • Какой формат наиболее распространен для текстового файла? CSV, XML или что-то еще?
  • Какой самый простой способ импортировать данные?

Несколько заметок:

  • Данные статические. В идеале приложение будет загружать данные в «Базовые данные» только один раз (при первом запуске приложения).
  • Каждый дополнительный запуск приложения будет просто извлекать данные из некоторого базового источника данных (который я пока не совсем знаком), а не перезагружать их из текстового файла.

Ответы [ 2 ]

3 голосов
/ 13 мая 2011

Если данные структурированы реляционным способом, то XML или JSON позволяют легко сохранить эту структуру, а затем легко проанализировать и сохранить в вашем хранилище базовых данных.Вам нужно будет использовать синтаксический анализатор XML или JSON, который превратит ваши данные в массив словарей (или нескольких уровней, если этого требует ваша структура данных).Вы будете просто перебирать массив и копаться в словари (и под-массивы и под-словари, если это уместно) и добавлять объекты в свой магазин по ходу работы.

Если это плоские данные, простойтаблица, которая станет единым целым в Базовых данных, затем текстовые файлы с разделителями табуляции или CSV подойдут (и разделить табуляцией еще проще, если не будет никаких вкладок в самих данных).Затем вы можете захватить отдельные строки, разбить строки на массив битов данных (в этом случае разделение табуляции очень просто), создать новый объект для каждой строки, установить его свойства для элементов массива и сохранить контекст..

Версия XML / JSON более сложна, чем здесь стоит написать - поищите SO, и вы найдете множество примеров - но вот версия с разделителями табуляции (предполагается, что у вас нетгигантский шарик данных, который невозможно удержать в памяти):

// Standard Core Data setup here, grabbing the managedObjectContext, 
//     which is what I'll call it
// Then parse your text
NSString *path = [[NSBundle mainBundle] pathForResource:@"YourTextFileName" ofType:@"txt"];
NSString *content = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:NULL];
NSArray *rows = [content componentsSeparatedByString:@"\n"];
// Now that we have rows we can start creating objects
YourManagedObject *yourManagedObject = nil;
for (NSString *row in rows) {
  NSArray *elements = [row componentsSeparatedByString:@"\t"];
  YourManagedObject *yourManagedObject = (YourManagedObject *)[NSEntityDescription insertNewObjectForEntityForName:@"YourManagedObject" inManagedObjectContext:managedObjectContext;
  [YourManagedObject setName:[elements objectAtIndex:0]];
  [YourManagedObject setCountry:[elements objectAtIndex:1]];
  // Etc. You may need an NSNumberFormatter and/or an NSDateFormatter to turn
  //   your strings into dates and numbers, depending on your data types
  [managedObjectContext save];
}

Пуф, все готово.

1 голос
/ 13 мая 2011

Если данные не меняются, зачем добавлять текстовый файл в приложение? Вместо этого создайте файл Core Data на своем Mac и включите его в качестве ресурса в приложение. Я предполагаю, что анализ данных занимает много времени, поэтому нет смысла заставлять ваших пользователей каждый ждать, пока это произойдет, когда вы могли бы выполнить один раз анализ и распространить результат.

Чтобы это произошло, возьмите модель данных и код синтаксического анализа из своего приложения и используйте их для создания небольшого приложения командной строки, которое просто читает текстовый файл, записывает файл Core Data и завершает работу.

...