私はOSXのCocoaでコーディングしています。
NSViewサブクラスにドラッグアンドドロップされたファイルを受信しようとしています。これは可能です。その内容とファイル名を取得して表示します。これは、最初はどのタイプのファイルでも実行できますが、2回目は、別のファイルをドラッグしようとすると、タイトルのみを設定できますが、setTitle:
本文は設定できません。setText:
私が得ているエラーは次のとおりです。
ドラッグセッション中に例外'NSInternalInconsistencyException'(理由'無効なパラメーターが満たされない:aString!= nil')が発生したため、ドラッグをキャンセルしました
と
-[NSTextFieldCell _objectValue:forString:errorDescription:]、/ SourceCache / AppKit / AppKit-1187 / AppKit.subproj / NSCell.m:1532でのアサーションの失敗
私のコード(申し訳ありませんが、かなり長いです!):
- (BOOL)performDragOperation:(id<NSDraggingInfo>)sender {
NSPasteboard *pboard;
NSDragOperation sourceDragMask;
sourceDragMask = [sender draggingSourceOperationMask];
pboard = [sender draggingPasteboard];
if ([[pboard types] containsObject:NSFilenamesPboardType]) {
NSURL *file = [NSURL URLFromPasteboard:pboard];
//NSData *data = [NSData dataWithContentsOfURL:file];
NSError *error;
NSStringEncoding encoding;
NSString *contentString = [[NSString alloc] initWithContentsOfURL:file usedEncoding:&encoding error:&error];
NSLog(@"Error: %@",error);
NSString *last = [[file path] lastPathComponent];
NSArray *parts = [last componentsSeparatedByString:@"."];
NSString *filename = [parts objectAtIndex:0];
NSString *fileType = [parts objectAtIndex:1];
NSLog(@"FILETYPE: %@", fileType);
if ([fileType isEqualToString:@"txt"] || [fileType isEqualToString:@"md"]) {
[self setTitle:filename];
if (self.textViewString == (id)[NSNull null] || self.textViewString.length == 0) {
[self setText:contentString];
} else {
BOOL whatToDo = (NSRunCriticalAlertPanel(@"What do you want to do?", nil, @"Append", @"Replace", nil) == NSAlertDefaultReturn);
if (whatToDo) {
//Append
[self setText:[NSString stringWithFormat:@"%@\n%@",self.textViewString,contentString]];
} else {
//Replace
[self setText:contentString];
}
}
return YES;
} else {
return NO;
}
} else if ([[pboard types] containsObject:NSPasteboardTypeString]) {
NSString *draggedString = [pboard stringForType:NSPasteboardTypeString];
if (self.textViewString == (id)[NSNull null] || self.textViewString.length == 0) {
[self setText:draggedString];
} else {
[self setText:[NSString stringWithFormat:@"%@\n%@",self.textViewString,draggedString]];
}
return YES;
}
else {
return NO;
}
}
前もって感謝します!:)