奇怪的NSPasteboard和TextEdit交互

时间:2010-11-16 14:01:16

标签: objective-c cocoa drag-and-drop appkit

我在我的应用中从两个地方拖放一个字符串。一个来自自定义NSView,另一个来自NSTableDataSource代表。第一个允许我将文本拖到TextEdit应用程序中,第二个不允许。我可以从两者拖到其他应用程序,如终端或TextMate。据我所知,我使用的是相同的代码。

我正在试图弄清楚什么是错的。它原则上是有效的,因为我可以拖到一些应用程序。但是TextEdit发生了什么?

来自自定义NSView:

(void)mouseDown:(NSEvent *)theEvent
{
    NSString *testString = @"TEST";

    NSImage *dragImage;
    NSPoint dragPosition;

    NSPasteboard *pboard = [NSPasteboard pasteboardWithName:NSDragPboard];

    [pboard declareTypes:[NSArray arrayWithObjects: NSStringPboardType, nil] owner:nil];
    [pboard setString:testString forType:NSStringPboardType];

    dragImage = // blah
    dragPosition = [self convertPoint:[theEvent locationInWindow] fromView:nil];

    [self dragImage:dragImage
                 at:dragPosition
             offset:NSZeroSize
              event:theEvent
         pasteboard:pboard
             source:self
          slideBack:YES];
    }
}

从表委托:

(BOOL)tableView: (NSTableView *)aTableView writeRowsWithIndexes: (NSIndexSet *)indexes toPasteboard: (NSPasteboard *)pboard
{
    NSString *testString = @"TEST";

    [pboard declareTypes:[NSArray arrayWithObjects: NSStringPboardType, nil] owner:nil];
    [pboard setString:testString forType:NSStringPboardType];

    return YES;
}

如果我打印出第一个的pboard类型:

"public.utf8-plain-text",
NSStringPboardType,

第二个:

"public.utf8-plain-text",
NSStringPboardType,

同样,第一个内容:

2010-11-16 13:56:01.832 XXX[1654:a0f] public.utf8-plain-text:TEST
2010-11-16 13:56:01.838 XXX[1654:a0f] NSStringPboardType:TEST

第二次

2010-11-16 13:56:05.623 XXX[1654:a0f] public.utf8-plain-text:TEST
2010-11-16 13:56:05.623 XXX[1654:a0f] NSStringPboardType:TEST

据我所知,两者的行为应该相同。但他们不是。想法?

0 个答案:

没有答案