【问题标题】:NSURL Unrecognized SelectorNSURL 无法识别的选择器
【发布时间】:2012-08-15 01:41:48
【问题描述】:

我的班级有一个函数:

-(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 但这并没有解决问题。有什么建议吗?

【问题讨论】:

    标签: objective-c ios cocoa-touch nsdata


    【解决方案1】:

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

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

    等等

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 当我运行时,我得到:断言失败:([selectedFileURL isKindOfClass:[NSString class]] &&“实际上不是字符串!”),函数 -[DataViewController receiveFileName:],文件 /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变量而无需静态或动态类型检查。
      猜你喜欢
      • 1970-01-01
      • 2012-09-28
      • 2013-12-24
      • 1970-01-01
      • 2018-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多