2013-11-12 3 views
2

Есть ли способ отключить автоматическое сохранение для UIManagedDocument?Отключить автоматическое сохранение в UIManagedDocument

Я представляю NSManagedObjects в контроллере, где пользователь может их добавлять и удалять. Но я просто хочу сохранить эти изменения, когда пользователь явно запускает действие сохранения. В противном случае я хочу отказаться от изменений.

Благодарим за помощь!

+0

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

+0

Это хороший момент. Для моей ситуации, хотя хорошо вернуться к предыдущему состоянию. Спасибо за замечание! – kahlo

ответ

2

Не можете переопределить метод ниже в UIManagedDocument подкласса

- (void)autosaveWithCompletionHandler:(void (^)(BOOL success))completionHandler 

EDIT: Вот некоторые дополнительные методы, которые вы можете захотеть включить. Я использую первый, чтобы подтвердить, когда и когда происходит автоматическое сохранение, а второе - для отладки определенных ошибок, подробности о которых не могут быть получены каким-либо другим способом. Это все, что в моем подклассе, поэтому его довольно тривиально добавить это.

@implementation YourManagedDocument 


- (id)contentsForType:(NSString *)typeName error:(NSError *__autoreleasing *)outError 
{ 
    NSLog(@"Auto-Saving Document"); 
    return [super contentsForType:typeName error:outError]; 
} 

- (void)handleError:(NSError *)error userInteractionPermitted:(BOOL)userInteractionPermitted 
{ 
    NSLog(@" error: %@", error.localizedDescription); 
    NSArray* errors = [[error userInfo] objectForKey:NSDetailedErrorsKey]; 
    if(errors != nil && errors.count > 0) { 
     for (NSError *error in errors) { 
      NSLog(@" Error: %@", error.userInfo); 
     } 
    } else { 
     NSLog(@" error.userInfo = %@", error.userInfo); 
    } 
} 
@end 
+0

Да, мне кажется, это то, что я в итоге сделаю и передаю флаг в контроллере. Я хочу отключить автоматическое сохранение. Я надеялся хотя бы найти какое-то решение, которое избегало подклассификации. Спасибо, в любом случае! – kahlo

0

Для получения дополнительной информации см. this SO answer, но если вы явно не сохранили свой NSManagedObjectContext, вы можете позвонить [managedObjectContext rollback], чтобы отменить изменения, внесенные пользователем.

+0

Это похоже на правильный подход. Однако как он узнает, до каких пор отказаться от изменений? Автоматическое сохранение происходит непредсказуемым образом. Спасибо за ваш ответ! – kahlo

Смежные вопросы