Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/121.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c NSURL无法识别的选择器_Objective C_Ios_Cocoa Touch_Nsdata - Fatal编程技术网

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变量。