你知道当你从停靠栏中拖出一个项目并且那个云拖动光标出现时的效果,当你松开它时会消失效果吗?类似地,在Xcode中,当您在行号装订线外拖动断点时,也会发生同样的情况.
我想在我的应用程序中实现相同的效果,但找不到正确的方法.
我有一个NSImageView后代来实现NSDraggingSource和NSDraggingDestination协议.我有这个视图的几个实例,允许在其他视图之间拖动它们的内容(在这种情况下进行复制操作,但这只是显示我已经拖拽并完全适用于标准任务).
现在,当我将图像从视图拖到任何地方(另一个视图实例除外)时,我希望删除操作在drop上进行.但是,拖动操作完全由目标视图控制.我可以设法让它们以我想要的方式响应(即使这将是很多工作),但是如果我拖到我的应用程序之外它就完全失败了.
如果我可以获得删除拖动操作,我可以通过以下方式轻松处理:
- (void)draggedImage: (NSImage *)image
endedAt: (NSPoint)screenPoint
operation: (NSDragOperation)operation
{
if (operation == NSDragOperationDelete) {
NSRect rect = [self.window convertRectToScreen: [self convertRect: self.frame fromView: nil]];
NSShowAnimationEffect(NSAnimationEffectPoof, rect.origin, self.bounds.size, nil, nil, NULL);
}
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试过像这样设置删除游标:
- (void)draggingSession: (NSDraggingSession *)session
movedToPoint: (NSPoint)screenPoint
{
if (!NSPointInRect(screenPoint, self.window.frame)) {
[[NSCursor disappearingItemCursor] set];
}
}
Run Code Online (Sandbox Code Playgroud)
(为简单起见,这是目前整个windw).只要我没有点击桌面或取景器窗口,这就可以工作.在开始闪烁时,可能是因为Finder同时设置了自己的拖动光标.当我撞到码头时它完全没有效果.当我定义自己的粘贴板数据类型时,也会发生这种情况.
此外,我的应用程序中任何其他启用drop的视图仍然会接受我不希望发生的拖动数据(例如NSTextView)(我正在使用自定义方案将NSURL写入拖动粘贴板).
更新:
我走了几步.正如彼得已经指出的draggingSession:sourceOperationmaskForDraggingContext:那样,在我的代码中处理哪个看起来很重要:
- (NSDragOperation) draggingSession: (NSDraggingSession *)session
sourceOperationMaskForDraggingContext: (NSDraggingContext)context;
{
switch(context) {
case NSDraggingContextOutsideApplication:
return NSDragOperationDelete;
break;
case NSDraggingContextWithinApplication:
default:
return NSDragOperationDelete …Run Code Online (Sandbox Code Playgroud) 在 React 组件中,我想保留对类型不同(div、img 等)的子节点的引用。所以我定义了一个成员变量:
export class MyComp extends Component<IProperties, IState> {
private triggerRef = React.createRef<HTMLElement>();
...
}
Run Code Online (Sandbox Code Playgroud)
并想用它来保存所需的参考:
const trigger = <div ref={this.triggerRef} className={className} style={style} />;
Run Code Online (Sandbox Code Playgroud)
虽然,这会产生一个错误:
Type 'RefObject<HTMLElement>' is not assignable to type 'string | ((instance: HTMLDivElement | null) => void) | RefObject<HTMLDivElement> | null | undefined'.
Type 'RefObject<HTMLElement>' is not assignable to type 'RefObject<HTMLDivElement>'.
Property 'align' is missing in type 'HTMLElement' but required in type 'HTMLDivElement'.ts(2322)
lib.dom.d.ts(6708, 5): 'align' is declared here.
index.d.ts(143, 9): The expected type comes …Run Code Online (Sandbox Code Playgroud) 我见过这样的代码,XCode是从objective-c初始化器创建的:
init!(logMsg: String!, level logLevel: DDLogLevel, flag logFlag: DDLogFlag, context logContext: Int32, file: UnsafePointer<Int8>, function: UnsafePointer<Int8>, line: Int32, tag: AnyObject!, options optionsMask: DDLogMessageOptions)
init!(logMsg: String!, level logLevel: DDLogLevel, flag logFlag: DDLogFlag, context logContext: Int32, file: UnsafePointer<Int8>, function: UnsafePointer<Int8>, line: Int32, tag: AnyObject!, options optionsMask: DDLogMessageOptions, timestamp aTimestamp: NSDate!)
Run Code Online (Sandbox Code Playgroud)
原始代码是:
- (instancetype)initWithLogMsg:(NSString *)logMsg
level:(DDLogLevel)logLevel
flag:(DDLogFlag)logFlag
context:(int)logContext
file:(const char *)file
function:(const char *)function
line:(int)line
tag:(id)tag
options:(DDLogMessageOptions)optionsMask;
- (instancetype)initWithLogMsg:(NSString *)logMsg
level:(DDLogLevel)logLevel
flag:(DDLogFlag)logFlag
context:(int)logContext
file:(const char *)file
function:(const char *)function
line:(int)line
tag:(id)tag
options:(DDLogMessageOptions)optionsMask
timestamp:(NSDate …Run Code Online (Sandbox Code Playgroud) 我安装了MySQL Workbench,我遇到了以下问题.
我执行这个简单的选择查询:
SELECT * FROM spring_security.user;
Run Code Online (Sandbox Code Playgroud)
返回行列表.
因此,在输出区域中,我选择特定行的字段,然后尝试更改其值.但我不能这样做.
似乎是不可能为特定行的特定字段插入新值.
为什么?如何使用此工具更改值?
TNX
Mac (10.14) 上的 MySQL Workbench 仅打开片刻,然后立即关闭,没有任何(可见)错误消息。重新安装并不能解决问题。
我能做些什么来解决这个问题?
我试图用一个空格替换某些文本中的所有多个空格.这应该是一个非常简单的任务,但由于某种原因,它返回的结果与预期不同.我已经阅读了NSScanner上的文档,看起来它运行不正常!
NSScanner *scanner = [[NSScanner alloc] initWithString:@"This is a test of NSScanner !"];
NSMutableString *result = [[NSMutableString alloc] init];
NSString *temp;
NSCharacterSet *whitespace = [NSCharacterSet whitespaceCharacterSet];
while (![scanner isAtEnd]) {
// Scan upto and stop before any whitespace
[scanner scanUpToCharactersFromSet:whitespace intoString:&temp];
// Add all non whotespace characters to string
[result appendString:temp];
// Scan past all whitespace and replace with a single space
if ([scanner scanCharactersFromSet:whitespace intoString:NULL]) {
[result appendString:@" "];
}
}
Run Code Online (Sandbox Code Playgroud)
但由于某种原因,结果@"ThisisatestofNSScanner!"不是@"This is a test of …
我正在寻找Visual Studio Code(vscode)中的扩展名,可以在其中定义我的自定义代码大纲。本质上,以树状方式列出我的所有函数/定义。
假设我使用的是一种简单的语言,如下所示:
begin foo1 arriving procedure
move into queue1
print queue1
send to foo2
end
begin foo2 arriving procedure
move into queue2
print queue2
send to foo3
end
Run Code Online (Sandbox Code Playgroud)
我想知道是否有vscode的扩展,让我实现这样的事情:

如果可以点击,那就太好了。导航/转到定义,并且在更复杂的代码的情况下可以扩展。
到目前为止,我发现了什么。
vscode代码大纲 https://github.com/patrys/vscode-code-outline ,我喜欢这个扩展,除了它不适用于我的语言。 .js文件的示例图像
显示功能 https://marketplace.visualstudio.com/items?itemName=qrti.funclist
Sourcecookifier记事本++(可以做我想做的,但对于记事本++明显)
我喜欢第二个扩展名(显示功能),因为它很容易在vscode / settings文件中进行自定义。您可以从设置中定义自己的正则表达式。但是,它不在固定到编辑器的大纲视图中。现场也不会令人耳目一新。
我也喜欢第一个扩展,因为它在树状视图中,但是我似乎不知道如何以及在何处修改设置以实现所描述的布局。
如果有人能指出正确的方向,将不胜感激。我已经尝试了一些代码轮廓扩展文档,但是我认为这对我没有任何意义。
PS:关于StackOverflow的第一篇文章,请让我知道是否应该添加/更改。
提前致谢。
我没有找到一些使用Interface Builder动态创建NSPopover的示例.
下面的代码给出了一个异常,加载了nib,但没有设置视图:
NSViewController *controller = [[NSViewController alloc] initWithNibName:@"View" bundle:nil];
NSPopover *popover = [[NSPopover alloc] init];
[popover setContentSize:NSMakeSize(100.0f, 100.0f)];
[popover setContentViewController:controller];
[popover setAnimates:YES];
[popover showRelativeToRect:[sender bounds] ofView:sender preferredEdge:NSMaxXEdge];
[popover release];
[controller release];
Run Code Online (Sandbox Code Playgroud)
这是堆栈跟踪:
2011-10-22 12:00:16.804 Test[2020:707] -[NSViewController loadView] loaded the "View" nib but no view was set.
2011-10-22 12:00:16.807 Test[2020:707] (
0 CoreFoundation 0x00007fff87e10286 __exceptionPreprocess + 198
1 libobjc.A.dylib 0x00007fff92f2cd5e objc_exception_throw + 43
2 CoreFoundation 0x00007fff87e100ba +[NSException raise:format:arguments:] + 106
3 CoreFoundation 0x00007fff87e10044 +[NSException raise:format:] + 116
4 AppKit 0x00007fff90951e21 …Run Code Online (Sandbox Code Playgroud) 假设我有2个班:
class A
{
public:
typedef std::shared_ptr<A> Ref;
...
private:
B::Ref _b;
}
class B
{
public:
typedef std::shared_ptr<B> Ref;
...
private:
A::Ref _a;
}
Run Code Online (Sandbox Code Playgroud)
这显然需要B类和B :: Ref的前向声明.前向声明B很简单,但如何对B :: Ref也这样做?
在库中,我有一个例外(RuntimeException -> RecognitionException -> NoViableAltException)的层次结构.在执行期间,NoViableAltException抛出一个,如下所示,并从中创建一个异常指针:
try {
//code that throws NoViableAltException
} catch (RecognitionException &re) {
std::exception_ptr e = std::make_exception_ptr(re);
reportError(e);
}
Run Code Online (Sandbox Code Playgroud)
e其他地方使用的值与此问题无关.在reportError()我实际处理错误:
void reportError(std::exception_ptr e) {
...
try {
std::rethrow_exception(e);
} catch (NoViableAltException &ne) {
reportNoViableAlternative(recognizer, ne);
} catch (InputMismatchException &ne) {
reportInputMismatch(recognizer, ne);
} catch (FailedPredicateException &ne) {
reportFailedPredicate(recognizer, ne);
} catch (RecognitionException &ne) {
recognizer->notifyErrorListeners(ne.getOffendingToken(), ne.what(), e);
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的问题:当我重新抛出时e,NoViableAltException分支不被采用,而是RecognitionException(最后一个).这是令人惊讶的,我想知道为什么会这样.我也试图抓住NoViableAltException*,但无济于事.捕获各个异常类型的正确方法是什么?