3

アプリの 2 つの場所から文字列をドラッグ アンド ドロップしています。1 つはカスタムから、NSViewもう 1 つはNSTableDataSourceデリゲートからです。最初のものは TextEdit アプリケーションにテキストをドラッグできますが、2 つ目はできません。両方から Terminal や 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,

そして2番目に:

"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

私が知る限り、この 2 つは同じように動作するはずです。しかし、そうではありません。アイデア?

4

0 に答える 0