我有一些自定义类,这些类创建一个对象数组,然后将其动态转换为UICollectionView的单元格,并且这些类基本上都如下所示:

import Foundation

class BoardNote : NSObject {
   var note_id : String = ""
   var itemType : String = ""
   var added_by : Any = ""
   var link : Any = ""
   var content : String = ""
   var board_id : Any = ""
   var date_added : Any = ""
 }


然后,使用此类的实例创建一个像这样的单元:

let cell = collectionView.dequeueReusableCell(withReuseIdentifier:
"noteViewCell", for: indexPath) as! NoteViewCell
        cell.content.text = (itemArray[indexPath.row] as!
BoardNote).content
        cell.noteId = (itemArray[indexPath.row] as! BoardNote).note_id
        print("made note cell")
        return cell


当我尝试在集合视图中实现基本的拖放操作时,出现错误“无法将类型“ BoardNote”的值强制转换为“ NSObject”。

我看到可能还需要将此扩展为类NSItemProviderWriting的扩展,但是我不确定如何扩展。

这是我的DragDelegate扩展的开头,其中错误发生在第4行,这是线程1:信号SIGABRT:

extension BoardViewController : UICollectionViewDragDelegate
{
func collectionView(_ collectionView: UICollectionView,
itemsForBeginning session: UIDragSession, at indexPath: IndexPath) ->
[UIDragItem]
{
    let item = self.itemArray[indexPath.row]
    let itemProvider = NSItemProvider(object: item as! NSObject as!
NSItemProviderWriting)
    let dragItem = UIDragItem(itemProvider: itemProvider)
    dragItem.localObject = item
    return [dragItem]
}


谢谢!

最佳答案

首先,您需要删除此行上的项目:

NSItemProvider(object: item as! NSObject as! NSItemProviderWriting)


使其:

 NSItemProvider(object: item)


然后,错误是不解自明的:您需要使您的自定义类符合NSItemProviderWriting和NSItemProviderReading协议,然后添加该协议所需的存根方法:

class BoardNote : NSItemProviderWriting, NSItemProviderReading{
   var note_id : String = ""
   var itemType : String = ""
   var added_by : Any = ""
   var link : Any = ""
   var content : String = ""
   var board_id : Any = ""
   var date_added : Any = ""
 }



  注意:您可以忽略NSObject继承,因此here


您可以通过单击红色错误信号,然后单击“修复”来简单地添加协议存根。

Here有关如何进行拖放的教程,因此您可以检查如何填充NSItemProviderWriting和NSItemProviderReading协议存根。

Here您可以检查的类似问题


  基本上,我链接的问题是在同一行NSItemProvider(object:item)中问问题,但是问题是开发人员没有给该方法提供类实例,而是给了类名

10-05 21:07
查看更多