Tag: nsundomanager

撤消视图控制器中所做的所有更改

是否有可能撤消视图控制器中所做的所有更改,而不影响在其父视图控制器中所做的更改? 顺便说一句。 它们具有相同的managedObjectContext。 PS。 我有两个实体A和B. A与B具有多对多关系。视图控制器VCA用于在A中执行一些更改。视图控制器VCB用于在B中执行一些更改。VCA是VCB的父视图控制器。

逐个保存NSUndoManager事务

我不仅需要将更改保存在Core Data ,还需要保存在服务器上。 我担心的是,在我的情况下,用户可以在很短的时间内做一堆交互。 在交互之间没有足够的时间来接收从服务器返回的成功消息。 因此,要么lockingGUI,直到下一个消息返回 – 现在就是这种情况 – 或者select一种不同的方法。 我的新方法是让用户做很多交互,并将事务放到NSUndoManager提供的undo stack ,在NSManagedObjectContext启用, 但是只保存/提交接收到成功消息的事务 。 如何一次移动一个撤消“游标”,逐个提交logging,尽pipe上下文中已经包含了未经保存的更改?

部分保存managedObjectContext

我有3个事务已经在NSManagedObjectContext : A , B , C 。 他们按相同的顺序执行/添加到上下文中。 我怎样才能保存第一个A事务,但保持未保存的B , C上下文。 insert A , insert B , insert C , commit A ,.. 不幸的是NSManagedObjectContext不能commit A ,而是保存所有的事务。

实现NSUndoManager

我很难实现NSUndoManager,我尝试阅读它的苹果文档,但我无法弄清楚。 这是我迄今为止所尝试过的。 我已经创build了一个应用程序,通过连接数组中的两点来绘制线,我通过删除最后一个对象实现了一个撤消方法,但不知道如何实现重做,我偶然发现NSUndoManager,并开始阅读它的文档,但我没有知道如何将其应用于我的问题。 下面是我现在的代码 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { NSUInteger taps = [[touches anyObject]tapCount]; if(taps == 2) { [self setNeedsDisplay]; } else { if([self.pointsArray count] == 0) { self.pointsArray = [[NSMutableArray alloc]init]; UITouch *t = [touches anyObject]; CGPoint startLoc = [t locationInView:self]; [self.pointsArray addObject:[NSValue valueWithCGPoint:startLoc]]; } } } -(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { UITouch *t […]

难以实现NSUndoManager重做function

我想在我的iOS应用程序中实现一个NSUndoManager 。 我有撤消function工作,但不是重做部分。 我对iOS开发很NSUndoManager ,这是我第一次使用NSUndoManager所以它可能是微不足道的。 我的应用程序是一个绘画/笔记应用程序,我有一个撤销/重做堆栈与最后十个UIImage (我不知道这是否是最有效的方式)在一个数组中。 当用户对当前图像进行更改时,旧图像被压入堆栈,如果数组已经有十个对象,则删除arrays中的第一个图像。 我有一个int实例variables,用于跟踪数组中的对象,并确保显示正确的图像。 我的代码如下所示: – (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { if (oldImagesArrays.count >= 10) { [oldImagesArrays removeObjectAtIndex:0]; } UIImage * currentImage = pageView.canvas.image; if (currentImage != nil) { [oldImagesArrays addObject:currentImage]; undoRedoStackIndex = oldImagesArrays.count -1; } […] } – (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { UIImage * currentImage = [oldImagesArrays lastObject]; […]

“:范围{0,10}越界; string长度9“与撤消错误

当我尝试在UISearchBar撤消时,我的应用程序崩溃。 在我的应用程序,我有代码,以防止在search栏上input“%”符号,为此,它将textDidChange方法中的%replace为@“”,如下所示: – (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText { self.searchBar.text = [searchText stringByReplacingOccurrencesOfString:@"%" withString:@""]; } 所以,如果我input文字“abc%xyz”,search栏上显示的最终文字就是“abcxyz”。 不,当我点击撤消,我看到'xyz'被清除,我仍然在search栏上看到'abc',而不是一次清除'abcxyz'。 现在,如果我再次点击撤消清除'abc'我的应用程序崩溃与[NSBigMutableString substringWithRange:]: Range out of bounds错误。 我假设即使'%'被replace为@“”,撤销pipe理器可能仍然持有它,因此范围超出了界限。 我试过[searchBar.undoManager removeAllActions]; 在用@“replace%后的textDidChange ,但是没有帮助。 这里是代码: – (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText { self.searchBar.text = [searchText stringByReplacingOccurrencesOfString:@"%" withString:@""]; [searchBar.undoManager removeAllActions]; } 问题:以前有人遇到类似的问题吗? 我如何处理撤消?