我有一些自定义类,这些类创建了一个对象数组,然后为我的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: signal 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]
}谢谢!
发布于 2018-09-25 17:39:34
首先,您需要删除在这一行中强制转换的项:
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继承,这里是为什么
您只需单击错误红色信号,然后单击"Fix“即可添加协议存根。
这里关于如何进行拖放的教程,这样您就可以检查如何填充NSItemProviderWriting和NSItemProviderReading协议存根。
这里类似的问题,您可以检查
基本上,我所链接的问题是在您的同一行NSItemProvider(object: item)中询问一个问题,但是问题是开发人员不是给方法一个类实例,而是给这个方法一个类名。
https://stackoverflow.com/questions/52502619
复制相似问题