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 回答