我设法做到这一点,认为这将工作:
- (ID)initWithCoder:(NSCoder *)coder{ self=[super initWithCoder:coder]; if ( self ) { Nsstring *myType = (__brIDge Nsstring *)(UTTypeCreatePreferredIDentifIErForTag(kUTTagClassNSPboardType,kUTTypeAudio,NulL)); [self registerForDraggedTypes: [NSArray arrayWithObject:myType]]; } return self;}
上面的代码似乎不允许任何文件被放入NSVIEw.我假设这是因为myType对于registerForDraggedTypes无效.
您可以提供的任何帮助将不胜感激.提前致谢.
解决方法 注册kUTTypeAudio等类型不会注册拖动的文件;它注册拖动音频.它可能适用于接受从其他应用程序拖入的任何类型的音频,但不适用于接受文件.您需要注册类型kUTTypefileURL.执行此 *** 作后,用户拖入的任何文件都将点亮您的拖动目标方法.在这个阶段没有办法说“我想要文件,但只有一些文件”.
作为拖动目标,您需要验证拖动(在draggingEntered :)中.您可以在此处测试是否有任何文件是音频文件.您可以选择三种方法:
>使用元数据框架获取每个文件的内容类型.对于没有Spotlight索引的卷上的任何文件,预计会失败.
>使用Launch Services确定与给定文件扩展名对应的内容类型.任何没有文件扩展名的文件都会失败;应该工作只要没有文件扩展名是模糊的(音频,AFAIK不是问题,但对于某些扩展可能是一个问题,如“dat”).
>尝试使用基础音频API /库解释每个文件,并查看它是否成功.
如果您获得其中一个文件的内容类型(UTI),则必须查看它是否是您可以处理的类型之一.
>如果您只是使用NSSound播放音频,请使用[NSSound soundUnfilteredTypes].这将返回一个UTI数组,所以你已经完成了;您可以简单地将传入的UTI与此数组中的UTI进行比较(使用UTTypeEqual).
>如果您正在使用音频文件服务(或下一个更高级别的API,ExtAudiofile)来读取每个文件,请使用AudiofileGetGlobalinfo获取类型代码列表,然后使用UTTypeCreatePreferredIDentifIErForTag将每个文件从OSType转换为UTI.
>如果您正在使用其他库,您只需要查看它提供的内容,以评估它支持的类型.
*当且仅当检查传入类型是否符合您的任何注册类型而不是相等.如果严格测试它们与您注册类型的相同性,则需要注册您可以处理的特定音频类型.
总结以上是内存溢出为你收集整理的objective-c – ‘registerForDraggedTypes:’仅限音频全部内容,希望文章能够帮你解决objective-c – ‘registerForDraggedTypes:’仅限音频所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)