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