NSURL无法识别的选择器

时间:2012-08-15 01:41:48

标签: objective-c ios cocoa-touch nsdata

我班上有一个功能:

-(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,我需要它来生成fileName字符串和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,但这并没有解决问题。有什么建议吗?

2 个答案:

答案 0 :(得分:0)

验证字符串变量(例如selectedFileURL)不是NSURL。您可以使用isKindOfClass:,如下所示:

assert([selectedFileURL isKindOfClass:[NSString class]] && "not actually a string!");

答案 1 :(得分:0)

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

NSData *fileData = [NSData dataWithContentsOfURL:selectedFileURL];

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

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