0

我在课堂上有一个功能:

-(void)receiveFileName:(NSNotification *) notification {
[self dismissViewControllerAnimated:YES completion:nil];
NSString *selectedFileURL = [notification.userInfo valueForKey:@"selectedFile"];
NSString *fileName = [[selectedFileURL lastPathComponent] stringByDeletingPathExtension];
NSData *fileData = [NSData dataWithContentsOfFile:selectedFileURL];

}

它从表视图控制器接收文件目标 url,我需要它来生成文件名字符串和 NSData,但我做了一些调试,它被 NSData 部分捕获并给我这个错误:

-[NSURL getFileSystemRepresentation:maxLength:]: 无法识别的选择器发送到实例 0x1f507830

当我打印 selectedFileURL 我得到

2012-08-14 21:58:01.309 Share Me[4546:907] file://localhost/var/mobile/Applications/B87D9131-2E73-4117-9EE8-32EA7E19127D/Documents/mza_9195653795305984944.320x480-75.jpg

当我打印文件名时,我得到:

2012-08-14 21:58:01.309 Share Me[4546:907] mza_9195653795305984944.320x480-75.jpg

我尝试使用 alloc 和 init 但这并没有解决问题。有什么建议么?

4

2 回答 2

0

selectedFileURL 是一个 NSURL 实例,而不是一个 NSString - 您可能误解了您正在使用的框架/库的文档。快速解决方案:

NSData *fileData = [NSData dataWithContentsOfURL:selectedFileURL];

NSData *fileData = [NSData dataWithContentsOfFile:[selectedFileURL path]];

等等

提示:您可能已经知道该对象不是字符串,而是开头的 URL 对象file://- 这是文件的特殊 URL 方案;包含路径的 NSString 实例不以此前缀开头,它们是普通的形式/path/to/file.ext

于 2012-08-15T05:09:44.917 回答
0

验证字符串变量(例如 selectedFileURL)不是NSURLs。你可以使用isKindOfClass:,像这样:

assert([selectedFileURL isKindOfClass:[NSString class]] && "not actually a string!");
于 2012-08-15T02:05:17.377 回答