作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在阅读一本关于 OS X 编程的书作为复习,并使用数组 Controller 、tableView 等设置了一个文档应用程序。本章要求使用 NSInitation 手动实现撤消支持。在本章中,他们要求手动添加创建员工方法,将导出添加到 NSArrayController,并将我的添加按钮连接到新方法而不是数组 Controller 。
相反,我用插入新对象的方法来做到这一点:
-(void)insertObject:(Person *)object inEmployeesAtIndex:(NSUInteger)index {
NSUndoManager* undoManager = [self undoManager];
[[undoManager prepareWithInvocationTarget:self]removeObjectFromEmployeesAtIndex:index];
if (![undoManager isUndoing]) {
[undoManager setActionName:@"Add Person"];
}
[self startObservingPerson:object];
[[self employees]insertObject:object atIndex:index];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
// Wait then start editing
[[self tableView]editColumn:0 row:index withEvent:nil select:YES];
});
}
这工作正常(看起来有点傻),但我想知道这可能会引起什么问题。我在其他地方这样做是为了在动画完成后执行代码(无法找出更好的方法)。
提前致谢。
最佳答案
为什么要延迟调用 -editColumn:row:withEvent:select:
?
无论如何,风险在于在此 -insertObject:...
方法结束和分派(dispatch)任务执行之间会执行其他操作。也许会更改 TableView 的内容,使 index
不再引用刚刚添加的员工。
关于macos - 在此用例中使用 GCDdispatchAfter() 时可能会出现哪些问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23728655/
我正在阅读一本关于 OS X 编程的书作为复习,并使用数组 Controller 、tableView 等设置了一个文档应用程序。本章要求使用 NSInitation 手动实现撤消支持。在本章中,他们
我是一名优秀的程序员,十分优秀!