Базовые данные замедляются при сканировании текстового представления с прокруткой - PullRequest
0 голосов
/ 15 ноября 2011

интересная проблема здесь:

У меня есть несколько текстовых представлений, связанных с моделью Core Data. Все отлично работает, кроме одного.

Когда я помещаю информацию в текстовое представление, все приложение замедляется, вызывая пляжный мяч.

Когда я прикрепил инструмент основных данных к процессу моего приложения, NSManagedObjectContext save вызывается с каждым набираемым символом. Это отставание наносит вред всему приложению.

Чтобы сделать вещи более странными, проблема не постоянна. Иногда приложение решает, что ему нужно записать в сохраненный документ (SQLite, XML, двоичный файл, неважно) для каждого символа, который введен в текстовое представление, а в других случаях это не так.

Есть идеи?

Ответы [ 2 ]

1 голос
/ 15 ноября 2011

Обновленный ответ

Я обновляю этот ответ, чтобы отразить реальность происходящего.

Как Патрикн заявил в своем первоначальном вопросе, он разрабатывает приложение на основе документов с Core Data. В конце концов он обнаружил, что документ возвращает YES для autoSavesInPlace. Оказывается, это поведение по умолчанию, которое, как представляется, имеет нежелательный эффект с NSManagedObjectContext.

По Apple :

В Mac OS X v10.7 и новее пользователям не нужно сохранять документы явно или беспокоиться о потере несохраненных изменений. Вместо этого Система автоматически записывает данные документа на диск по мере необходимости. Ваш Подкласс NSDocument включается в это поведение, переопределяя Метод класса autosavesInPlace для возврата YES. Идеальная база для без сохранения документов это: данные документа, которые пользователи видят в Окно приложения всегда идентично документу на диске.

Звучит замечательно, но они также говорят:

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

Короче говоря, если вы разрабатываете приложение на основе документов для Lion и видите сомнительную производительность, вам следует подумать, стоит ли возвращать YES для autosavesInPlace.

Оригинальный ответ

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

Запустите приложение, и вы сможете узнать, где оно происходит.

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

0 голосов
/ 15 ноября 2011

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

Я бы предложил добавить слой между Core Data и UITextView, который бы буферизовал информацию и запускал сохранение Core Data время от времени. (вместо каждого символа)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...