1

tableView で簡単なドラッグ アンド ドロップ操作を実装しようとしています。ただし、readObjectsForClasses を使用してペーストボードからデータを取得しようとすると、ランタイム例外が発生します。

"[__NSCFConstantString initWithBytes:length:encoding:]: 認識されないセレクターがインスタンスに送信されました"

これは、問題が発生する私の acceptDrop メソッドです。誰かが私が間違っていることを指摘するのを手伝ってもらえますか.

  (BOOL) tableView: (NSTableView *) view
    acceptDrop: (id ) info
           row: (NSInteger) row
 dropOperation: (NSTableViewDropOperation) op
   {    

   NSArray *pBoardClasses = [[NSArray alloc] initWithArray:[NSArray arrayWithObjects:[NSStringPboardType class], [NSDragPboard class], nil]];
   NSPasteboard *board =[info draggingPasteboard];

   if(![board canReadObjectForClasses:pBoardClasses options:nil])
   {
    NSLog(@"No acceptable data format in pasteboard. Cannot perform this operation!");
    return NO;
   }

   NSArray * dFromPboard = [board readObjectsForClasses:pBoardClasses options:nil];

   }
4

1 に答える 1

0

[NSString class]の代わりに使用[NSStringPboardType class]

また:[NSDragPboard class]それは正しくないようです。これを削除して、[NSString class]のみで動作するかどうかをテストします。

NSArray *stringObjects = [pboard readObjectsForClasses:@[ [NSString class], [NSAttributedString class] ] options:@{}];
    if(stringObjects.count > 0) {
        NSString *myStr = stringObjects[0];
        //…
    }
//…
于 2013-03-01T18:20:07.737 に答える