Objective c 使用NSUndoManager、Runloop-Obj-C进行单元测试
我试图用一个撤销管理器测试一些代码,但显然,当在同一个运行循环中运行时,撤销会被分组。我尝试过关闭groupsByEvent,但效果不理想Objective c 使用NSUndoManager、Runloop-Obj-C进行单元测试,objective-c,nsrunloop,nsundomanager,Objective C,Nsrunloop,Nsundomanager,我试图用一个撤销管理器测试一些代码,但显然,当在同一个运行循环中运行时,撤销会被分组。我尝试过关闭groupsByEvent,但效果不理想 - (NSString *)article { return _article == nil ? @"no article" : _article; } - (void)setarticle:(NSString *)article { if (_undoManager) { [(ModelGraph *)[_undo
- (NSString *)article
{
return _article == nil ? @"no article" : _article;
}
- (void)setarticle:(NSString *)article
{
if (_undoManager)
{
[(ModelGraph *)[_undoManager prepareWithInvocationTarget:self] setarticle:self.article];
[_undoManager setActionarticle:@"undo set article"];
}
NSCharacterSet *charactersToRemove = [[NSCharacterSet alphanumericCharacterSet] invertedSet];
article = [[article componentsSeparatedByCharactersInSet:charactersToRemove] componentsJoinedByString:@""];
_article = article;
}
在我的测试中,我有:
undoManager = [[NSUndoManager alloc] init];
myObject.undoManager = undoManager;
[myObject setArticle:@"Article 1"];
[myObject setArticle:@"Article 2"];
[myObject setArticle:@"Article 3"];
[myObject setArticle:@"Article 4"];
[undoManager undo];
NSLog(@"myObject.article: %@", [myObject article]); //prints noarticle
但是当代码运行时,我总是返回:“no article”-当撤销发生时,它总是运行所有撤销的back…因为它们被添加到同一个runloop中
我只是想测试我的撤销是否与测试一起工作…还有想法
可能在每次更改后强制运行循环启动?更改运行循环模式
欢迎任何帮助
谢谢,克里斯。啊,这似乎管用,但看起来不是最好的
[undoManager setGroupsByEvent:NO];
[undoManager beginUndoGrouping];
dispatch_async (dispatch_get_main_queue(), ^{
[myObject setArticle:@"Article 1"];
[undoManager endUndoGrouping];
[undoManager beginUndoGrouping];
dispatch_async (dispatch_get_main_queue(), ^{
[myObject setArticle:@"Article 2"];
[undoManager endUndoGrouping];
[undoManager undo];
NSLog(@"myObject.article: %@", [myObject article]);
});
});