我的应用程序中有一个场景,我想在一个方法中做一些耗费时间的任务,其中包括一些数据处理和UI更新.我的方法看起来像这样,
- (void)doCalculationsAndUpdateUIs {
// DATA PROCESSING 1
// UI UPDATE 1
// DATA PROCESSING 2
// UI UPDATE 2
// DATA PROCESSING 3
// UI UPDATE 3
}
Run Code Online (Sandbox Code Playgroud)
由于耗时我想在后台线程上进行数据处理,使用,
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, NULL), ^{
Run Code Online (Sandbox Code Playgroud)
但由于数据处理和UI更新都采用相同的方法,我只想在主线程中使用UI更新,
dispatch_async(dispatch_get_main_queue(), ^{
Run Code Online (Sandbox Code Playgroud)
最后我的方法看起来像这样,
- (void)doCalculationsAndUpdateUIs {
// DATA PROCESSING 1
dispatch_async(dispatch_get_main_queue(), ^{
// UI UPDATE 1
});
/* I expect the control to come here after UI UPDATE 1 */
// DATA PROCESSING 2
dispatch_async(dispatch_get_main_queue(), ^{
// UI UPDATE 2
});
/* I expect the control …Run Code Online (Sandbox Code Playgroud) multithreading objective-c grand-central-dispatch ios dispatch-async
我在我的应用程序中有一个相当普通的源列表(从对象库中拖出),其中包含一个NSTreeController数据源.我将DataCellNSTextField内部设置为可编辑,但我希望能够为某些单元格关闭它.我认为你这样做的方式是使用委托,但没有我试过的委托方法被调用.有什么我想念的吗?我的委托在我的XIB中设置了一个插座,它恰好是所有者的委托,同时实现了和 协议.NSTextFieldNSOutlineViewNSOutlineViewDelegateNSTextFieldDelegate
此外,我也不能使用旧–outlineView:shouldEditTableColumn:item: NSOutlineViewDelegate方法,因为这只适用于基于单元格的大纲视图(我假设是这种情况 - 大纲视图文档似乎没有为Lion更新,尽管类似NSTableView文档有,并且这些方法也没有调用).
我在一个全新的测试项目中重现了这一点,因此它绝对与我的任何自定义类无关.按照以下步骤创建我的示例项目,并重现此问题.
Source List拖到窗口上Object小号到坞(窗口的左侧),指定SourceListDataSource为一个类,并且SourceListDelegate对于其他dataSource和delegate插座连接到这两个对象NSTextField在大纲视图的列中选择DataCell视图的静态文本Value绑定,保持默认设置delegate插座连接到Source List Delegate对象Behavior属性设置为可编辑预期:该领域不可编辑,并且有一个"好吧,我应该吗?" 日志中的消息
实际:该字段是可编辑的,不记录任何消息
这是框架中的错误,还是我应该以不同的方式实现这一目标?
#import <Cocoa/Cocoa.h>
@interface SourceListDataSource : NSObject <NSOutlineViewDataSource>
@property (retain) NSArray …Run Code Online (Sandbox Code Playgroud) 我正在努力回应一个click内部textfield.点击发生时,我打开一个panel.我最初的想法是使用一种delegate方法来响应click事件 - 但我发现:
此方法不起作用:
(void)textDidBeginEditing:(NSNotification *)aNotification
Run Code Online (Sandbox Code Playgroud)
这种方法确实有效,但只有在我实际编辑文本字段中的文本时才会有效,而不是在我第一次单击它时.并且 - 如果我第二次编辑文本,此方法将停止工作:
(void)controlTextDidBeginEditing:(NSNotification *)aNotification
Run Code Online (Sandbox Code Playgroud)
我可以尽可能多地使用细节 - 或理想的代码示例.我知道一个nstextfield继承NSControl,其中有一个mouseDown事件.是否有类似的方式来响应事件textfield,也?
我有一个基于NSTableView的视图,其中单元格包含许多控件,包括文本字段和编辑字段.当用户尝试单击单元格中的控件以便(例如)开始编辑文本字段时,将忽略单击的主要目标并选择单元格.然后需要再次单击以执行最初预期的操作,即使此单击在考虑之前也会受到延迟.
如何避免此问题并选择行并将鼠标事件一次性转发到控件?