ОК, поэтому благодаря Мартину, указав, что я должен прочитать документы немного ближе. Это ожидаемое поведение, и вот что я сделал, чтобы обойти его (используйте свое мнение относительно того, подходит ли это для вас):
Я сохраняю контекст один раз каждые 3 секунды, проверяя в начале, если контекст имеет какие-либо изменения, прежде чем я начну выполнять фактический метод save:
на моем NSManagedObjectContext
. Я добавил простой увеличение/уменьшение NSUInteger
(_saveDisabler
) мой класс контроллера Core Data, который модифицирован с помощью следующих методов:
- (void)enableSaves {
if (_saveDisabler > 0) {
_saveDisabler -= 1;
}
}
- (void)disableSaves {
_saveDisabler += 1;
}
Тогда я все в моем методе пользовательских saveContext
это сделать простую проверку на вершине:
if (([moc hasChanges] == NO) || (_saveDisabler > 0)) {
return YES;
}
Это предотвращает сохранение возникновения, и означает, что фокус не украдена из любой из моих пользовательских TextField подклассов. Для полноты картины, я также подклассы NSTextField и включить/отключить сохранение в моем контроллере Основных данных из следующих методов:
- (void)textDidBeginEditing:(NSNotification *)notification;
- (void)textDidEndEditing:(NSNotification *)notification;
Это может быть немного грязным, но это работает для меня. Я очень хочу услышать о более чистых/менее запутанных методах, если кто-то сделал это успешно по-другому.
Вы сохраняете контекст при каждом изменении? Потеря фокуса Textfield - это нормальное поведение при сохранении NSManagedObjectContext. Проверьте протокол NSEditor для получения дополнительной информации –
Ну не на каждом изменении - он настроен на сохранение на задержку по времени и только в том случае, если контекст имеет изменения. Я не знал о протоколе NSEditor - мне придется немного переосмыслить это - спасибо! –
Я использую функцию автосохранения, которая поставляется с 10.7 для моего приложения на основе NSPsistentDocument. Теперь, когда операции сохранения обрабатываются автоматически, мои текстовые поля теряют фокус всегда после ввода двух символов. Может быть, я что-то упустил, но думаю, что для этого должно быть легко. Какие-либо предложения? – Sbhklr