Mar*_* W. 5 cocoa nstextview nsattributedstring nstextattachment nsfilewrapper
我有一个基本的NSTextView,启用了丰富的文本和图形(在IB中).我想得到的是拖入的任何图像的路径和文件名,所以我可以将它们传递给另一个类.
我是NSAttributedString的新手,但我有一个循环使用enumerateAttributesInRange:options:usingBlock:寻找NSAttachmentAttributeName,这一切都正常.但是深入一点,我进入了fileWrapper类,显然无法给出项目的路径.
我如何获得NSTextAttachment的名称和路径?
相关:是否有更简单的方法来获取它们然后单步执行属性?
非常感谢!
虽然我个人蔑视NSFileWrapper的设计,如果您只需要每个附件的数据,您可以通过NSFileWrapper的regularFileContents方法将其作为NSData实例访问.但是,我需要一个有效且明确的路径名来指向我的应用程序的附件.获得它比应该做的要多得多:
您可以对NSTextView进行子类化并覆盖NSDraggingDestination Protocol方法,draggingEntered:并且可以在拖动操作期间遍历传递给应用程序的NSPasteboardItem对象.我选择将路径名及其inode编号保存在NSMutableDictionary中,因为NSFileWrapper可以为您提供引用文件的inode.稍后,当我通过NSAttributedString访问NSTextView内容时,我可以使用inode作为索引来获取附件的路径名.
- (NSDragOperation)draggingEntered:(id < NSDraggingInfo >)sender {
// get pasteboard from dragging operation
NSPasteboard *pasteboard = [sender draggingPasteboard];
NSArray *pasteboardItems = [pasteboard pasteboardItems];
for ( NSPasteboardItem *pasteboardItem in pasteboardItems ) {
// look for a file url type from the pasteboard item
NSString *draggedURLString = [pasteboardItem stringForType:@"public.file-url"];
if (draggedURLString != nil) {
NSURL *draggedURL = [NSURL URLWithString:draggedURLString];
NSString *draggedPath = [draggedURL path];
NSLog(@"pathname: %@", draggedPath);
// do something with the path
// get file attributes
NSDictionary *draggedAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:draggedPath error:nil];
if ( draggedAttributes == nil)
continue;
// the NSFileWrapper allows access to the absolute file via NSFileSystemFileNumber
// put the path and the inode (returned as an NSNumber) into a NSMutableDictionary
NSNumber *draggedInode = [draggedAttributes objectForKey:NSFileSystemFileNumber];
[draggedFiles setObject:draggedPath forKey:draggedInode];
}
}
return [super draggingEntered:sender];
}
Run Code Online (Sandbox Code Playgroud)
我的解决方案的一个问题,即不影响我的应用程序,是将多个文件拖入视图(单独或一起),它们是同一文件的硬链接,只会被索引为添加到字典的最后一个路径名.分享inode.根据应用程序如何使用路径名,这可能是一个问题.
| 归档时间: |
|
| 查看次数: |
2105 次 |
| 最近记录: |