gpt4 book ai didi

macos - 在此用例中使用 GCDdispatchAfter() 时可能会出现哪些问题

转载 作者:行者123 更新时间:2023-12-03 17:52:04 24 4
gpt4 key购买 nike

我正在阅读一本关于 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com