Здравствуйте, Lorenzo_LAMAS, Вы писали:
L_L>>view — только destination, source у меня нет.
L_L>брал из эпплова примера такое: [self registerForDraggedTypes:[NSImage imagePasteboardTypes]], из за этого, собственно, и возникли проблемы.
В registerForDraggedTypes передается описание содержимого, а не типы файлов.
Как вариант, обработать в самом draggingEntered имена файлов на соотвествие нужного UTI.
#import "DragDropView.h"
@implementation DragDropView
- (id) initWithFrame : (NSRect) frame
{
self = [ super initWithFrame : frame ];
if (self)
{
[ self registerForDraggedTypes : [ NSArray arrayWithObjects : NSFilenamesPboardType, nil ] ];
}
return self;
}
- (NSDragOperation) draggingEntered : (id<NSDraggingInfo>) sender
{
NSPasteboard *pboard;
NSDragOperation sourceDragMask;
sourceDragMask = [sender draggingSourceOperationMask];
pboard = [sender draggingPasteboard];
if ([[pboard types] containsObject:NSFilenamesPboardType])
{
NSArray *paths = [pboard propertyListForType:NSFilenamesPboardType];
for (NSString* path in paths)
{
NSError *error = nil;
NSString *utiType = [[NSWorkspace sharedWorkspace]typeOfFile:path error:&error];
if (![[NSWorkspace sharedWorkspace]type:utiType conformsToType:(id)kUTTypeImage])
return NSDragOperationNone;
}
}
return NSDragOperationLink;
}
@end