如何解决 [__NSCFString _isResizable] 的运行时错误:无法识别的选择器发送到实例?

Posted

技术标签:

【中文标题】如何解决 [__NSCFString _isResizable] 的运行时错误:无法识别的选择器发送到实例?【英文标题】:how to solve run time error of [__NSCFString _isResizable]: unrecognized selector sent to instance? 【发布时间】:2012-07-07 10:29:10 【问题描述】:

我是 iphone 的初学者,在我的代码中由于未捕获的异常 'NSInvalidArgumentException' 而出现终止应用程序的运行时错误,原因:'-[__NSCFString _isResizable]: unrecognized selector sent to instance 0x6e6e300'

我的代码是

- (void)viewDidLoad

    [super viewDidLoad];
     NSString *path=[[NSBundle mainBundle] pathForResource:@"Animalfile" ofType:@"plist"];
    NSDictionary *dict=[NSDictionary dictionaryWithContentsOfFile:path];
    NSArray *animal=[dict valueForKey:@"image"];
    NSLog(@"print:%@",dict);
    NSLog(@"hello:%@",animal);

    UIImage *img=[animal objectAtIndex:currentImage];
        [animalphoto setImage:img];


给出适用于我的代码的任何建议和源代码......

【问题讨论】:

【参考方案1】:

当您尝试将字符串视为图像时会出现问题:

UIImage *img = [animal objectAtIndex:currentImage];

animal 数组中的值不能是图像,因为该数组来自使用 dictionaryWithContentsOfFile: 方法从文件中读取的字典 dict。 This method will create objects of types NSString, NSData, NSDate, NSNumber, NSArray, or NSDictionaryUIImage 不在dictionaryWithContentsOfFile: 方法可以创建的类型列表中,因此您的转换无效。

从错误消息看来,您收到的是NSString,而不是UIImage。检查该字符串的值以查看它所代表的内容:它可能是 URL、文件名或可用于获取图像的某种其他形式的标识符。根据字符串中的内容,将程序更改为加载img,而不是根据字符串的值。也许代码应该是

UIImage *img = [UIImage imageNamed:[animal objectAtIndex:currentImage]];

但如果不知道字符串的值,就无法确定。

【讨论】:

UIImage *img = [UIImage imageNamed:[animal objectAtIndex:currentImage]];

以上是关于如何解决 [__NSCFString _isResizable] 的运行时错误:无法识别的选择器发送到实例?的主要内容,如果未能解决你的问题,请参考以下文章

__NSCFString appendString: Cocoa 中 NSMutableString 崩溃

无法将'__ NSCFString'类型的值转换为'NSData'

Swift Userdefaults 将 String 转换为 __NSCFString

NSMutableDictionary 转换成 __ NSCFString

__NSCFString objectForKeyedSubscript: 异常

Swift - 无法将“__NSCFString”类型的值转换为“NSDictionary”