Unfortunately, the documentation I sent you to is way out of date and incomplete, and there is no good documentation provided by Apple.
The main problem you have right now is that you can't start the drag "outside" the view controller. You don't know what's outside, so you don't have a dragging source to tell you what to drag. In your above code, you're going to start a drag every time the left mouse button is pressed, which doesn't seem like a good idea.
For drags within your application, you're going to need an object that conforms to NSDraggingSource and an object that conforms to NSDraggingDestination. If you're dragging from another application, e.g. the Finder, you only need a NSDraggingDestination. The source (either inside your app or outside) is responsible for starting the drag.
It's a long time since I've implemented drag and drop, outside of a NSTableView, which does a lot of the work for you. IIRC, when you use "beginDraggingSession", you don't need to pre-fill the dragging pasteboard with items. Instead, you (in effect) pass the items as the array of NSDraggingItems. Each item, which is likely going to need to be a custom object, provides both the pasteboard object and the image that represents the object. For simple cases, like a URL and its icon, implementing this should be simple. (But of course I'm talking about drags originating inside your app.)
So, you're going to have to clarify your requirements, including exactly where you're dragging from and to.