我編碼可可,在OS X上的NSView拖動操作錯誤
我想收到拖放到我的NSView子文件 - 這是我能夠做到; 得到它的內容和文件名並顯示它們 - 我可以爲任何類型的文件做第一次,但第二次,當我嘗試拖動另一個文件時,我只能設置標題setTitle:
,但不是主體文本setText:
我得到的錯誤是:
取消阻力,因爲異常「NSInternalInconsistencyException」(理性「無效的參數並不令人滿意:ASTRING =零」)的募集一個dragg期間荷蘭國際集團會話
和
斷言故障 - [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;
}
}
提前感謝! :)
非常感謝,whatToDo細分正是我的意思,我沒有意識到。我傳入一個NSError和NSLogged它,但它出現爲「(null)」,所以我認爲沒有錯。我現在得到的行爲是現在讀取和顯示任何文件,但如果我再次嘗試使用任何文件,它會失敗,NSLogs「 - NSTextFieldCell _objectValue:forString:errorDescription:/ SourceCache/AppKit/AppKit -1187/AppKit.subproj/NSCell.m:1532「 – 2012-07-28 21:37:09
我已經更新了我的原始問題。 – 2012-07-28 21:42:06
你可以發佈你的更新的代碼,包括'NSError'的變化和修復'whatToDo'?要確保我們在同一頁面上。 – 2012-07-28 21:45:43