Objective c NSURL无法识别的选择器
我在班上有一个函数:Objective c NSURL无法识别的选择器,objective-c,ios,cocoa-touch,nsdata,Objective C,Ios,Cocoa Touch,Nsdata,我在班上有一个函数: -(void)receiveFileName:(NSNotification *) notification { [self dismissViewControllerAnimated:YES completion:nil]; NSString *selectedFileURL = [notification.userInfo valueForKey:@"selectedFile"]; NSString *fileName = [[selectedFileURL lastP
-(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的选择器无法识别
当我打印所选文件URL时,我得到
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,但没有解决问题。有什么建议吗?验证字符串变量(例如selectedFileURL)不是
NSURL
s。您可以使用isKindOfClass:
,如下所示:
assert([selectedFileURL isKindOfClass:[NSString class]] && "not actually a string!");
selectedFileURL是一个NSURL实例,而不是NSString-您可能误解了您正在使用的框架/库的文档。快速解决方案:
NSData *fileData = [NSData dataWithContentsOfURL:selectedFileURL];
NSData *fileData = [NSData dataWithContentsOfFile:[selectedFileURL path]];
等等
提示:您可能已经知道该对象不是字符串,而是URL对象,因为它以
file://
开头-这是文件的特殊URL方案;包含路径的NSString实例不以此前缀开头,它们的简单形式是/path/to/file.ext
当我运行时,我得到:断言失败:([selectedFileURL isKindOfClass:[NSString class]]]&&“实际上不是字符串!”),函数-[DataViewController receiveFileName:],file/Users/cristian_rivera/Documents/Share Me/Share Me/DataViewController.m,第56行。@cristian的意思是selectedFileURL
不是NSString
——它可能是NSURL
。objc不像其他语言那样从objc对象到objc对象进行隐式升级。因此,您可以验证[notification.userInfo valueForKey:@“selectedFile”]
是一个NSURL
,然后将变量的类型更改为NSURL
,然后更新转换valueForKey:
(您可能指的是objectForKey:
)返回id
——一些非类型化的objc实例,无需进行静态或动态类型检查即可分配给objc变量。