Хранение большого содержимого заметки -objective-c

Я делаю приложение для заметок, но это приложение не будет традиционным приложением для заметок. Это приложение будет использоваться сотрудниками моей компании и командами инженеров в моей компании. Содержание заметок будет большим, так как будет содержать некоторые математические выражения. Кроме того, файлы необходимо отправлять в Dropbox как текстовые файлы и файлы в формате PDF.

Интересно, какой из них лучше всего подходит для хранения большого содержимого данных:

1- Простая запись содержимого заметок в файл (например, note1.txt) в каталоге документов

Я использую эту функцию для записи файлов:

-(IBAction)writeFile:(id)sender
{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *fileNameData=[NSString stringWithFormat:@"%@.txt",fileName.text];
    NSString *filePath = [documentsDirectory stringByAppendingPathComponent:fileNameData];

    NSString *str = fileContent.text;

    [str writeToFile:filePath atomically:TRUE encoding:NSUTF8StringEncoding error:NULL];
} 

2- Или сохранить содержимое файла в базе данных и создать файл, когда пользователь хочет отправить заметку в Dropbox и отправить этот созданный файл в Dropbox?

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

ОБНОВЛЕНИЕ

Я сделал несколько проб. Я пытался писать и читать одну и ту же строку, используя оба метода; основные данные и файлы.

Для чтения строки из Core Data требуется около 16 секунд, а для чтения из файла с помощью метода stringWithContentsOfFile - около 5 секунд.

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


person amone    schedule 02.08.2013    source источник
comment
Основные данные - хороший вариант для хранения больших данных. Для справки см. Эту ссылку. stackoverflow.com/questions/15788414 /   -  person Sandeepk2r    schedule 02.08.2013


Ответы (3)


Основные данные - это непростая задача для настройки и работы. У вас есть невероятно большой набор данных или вам нужно установить взаимосвязь сущностей между файлами?

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

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

person odyth    schedule 02.08.2013
comment
Я раньше не пользовался Core Data и сейчас немного запутался :) Размеры наших файлов примерно 500 КБ. Мы очень часто читаем и редактируем файлы, поэтому я ищу лучшее решение. Вы предлагаете GCD для этого размера? - person amone; 02.08.2013
comment
Мне не нужно создавать сложные отношения между файлами. Мне нужно сохранить только заголовок заметки, содержимое заметки и имя создателя. - person amone; 02.08.2013
comment
Если вы просто сохраняете заметку в строке, вы можете использовать GCD и запустить ее в последовательную фоновую очередь для записи. Последовательная очередь обеспечит выполнение прав, чтобы вам не пришлось беспокоиться об отмене выполняемой записи. Когда блок копирует ваш строковый объект, вы можете заметить небольшой скачок в памяти, но это не должно быть так уж плохо. - person odyth; 05.08.2013
comment
Core Data - это излишек для небольших наборов данных, особенно тех, которые не нуждаются в сложном сопоставлении отношений. Это то, что Apple рассказала мне на WWDC 2013. - person odyth; 05.08.2013
comment
Почему вы предлагаете мне использовать НОД? Не могли бы вы вкратце объяснить, каковы преимущества использования GCD для записи файлов? - person amone; 05.08.2013
comment
GCD = Grand Central Dispatch - это яблочный многопоточный фреймворк. вы не должны записывать на диск в основном потоке, так как это может заблокировать пользовательский интерфейс. Я рекомендую вам обернуть ваш вызов записи в dispatch_async в последовательную фоновую очередь. - person odyth; 08.08.2013

Что ж, это должно быть сделано с использованием основных данных Core Data Usage и для преимущества, пожалуйста, прочтите этот вопрос SO Почему я должен использовать Core Данные для моего приложения для iPhone?

Я сделал приложение Notes Я и использовал основные данные, и все работает нормально. Надеюсь это поможет.

РЕДАКТИРОВАТЬ: Или проверьте эту ссылку, относящуюся к Рекомендации по хранению данных. Он включает в себя все типы рекомендаций, предоставленных Apple.

person IronManGill    schedule 02.08.2013
comment
Честно говоря, описанная проблема является прекрасным примером, в котором НЕ следует использовать Core Data: 1) Существуют большие двоичные объекты данных, которые не должны попадать в постоянное хранилище, а заметки - это предположительно простые объекты с одним неизменным значением: текстом. Таким образом, классные функции Core Data вообще не будут использоваться. - person CouchDeveloper; 02.08.2013
comment
Я не понимаю, что вы имеете в виду под постоянным магазином? Заметки не являются постоянными данными? - person amone; 03.08.2013
comment
@charty Ну, приложение, которое у меня есть в качестве примера, пожалуйста, протестируйте его, и вы увидите использование основных данных ... - person IronManGill; 03.08.2013

CoreData будет быстрее, чем чтение / запись в файлы. Но вы не беспокоитесь о производительности, когда пишете в файл. Вы беспокоитесь о производительности, когда отправляете файлы в Dropbox. Как часто это происходит? Если это делается не так часто, как один раз в день, возможно, текстовые файлы - лучший вариант, чем coredata или sqlite.

person zahreelay    schedule 02.08.2013
comment
Да, мы часто используем Dropbox, на самом деле 3-4 из каждых 10 файлов хранятся в Dropbox. - person amone; 02.08.2013