访问实例会引发异常 - NSDictionary NSArray

时间:2014-04-27 14:15:17

标签: ios objective-c exception nsarray nsdictionary

我是Objective-C的初学者,并且在字典和数组方面有点挣扎。

我的目标是创建一个表格视图,其中每个单元格都包含来自服务器的图片。 pic的url来自JSON调用。我从Apple下载了名为“lazy table view”的示例,并试图将其与我在Standford iOS Class中找到的那个合并。到目前为止,一切都有效,除了图片。一旦我尝试访问图标,Xcode就会引发以下异常:

-[__NSCFDictionary Icon]: unrecognized selector sent to instance 0x10b845ff0
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFDictionary Icon]: unrecognized selector sent to instance 0x10b845ff0'

有问题的代码如下:

@interface FlickrPhotosTVC : UITableViewController
@property (nonatomic, strong) NSArray *photos; 
@end

@interface ClRecord : NSObject
@property (nonatomic, strong) UIImage *Icon;
#define FLICKR_PHOTO_TITLE @"title"

ClRecord *clRecord = self.photos[indexPath.row];
cell.textLabel.text = [clRecord valueForKeyPath:FLICKR_PHOTO_TITLE]; // works
if (clRecord.Icon) NSLog(@"test"); // throws exeption

不知何故,这似乎与类型相关。在访问词典或类似内容时尝试访问数组。我在堆栈上发现了一些相关帖子,但到目前为止还无法解决。

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

存储在self.photos中的对象似乎是字典对象而不是ClRecord对象。你得到的错误说你在字典对象上调用了Icon方法。

检查您填充照片数组的位置,以确保将ClRecord对象放入其中,而不是字典对象。

答案 1 :(得分:0)

你可以做NSLog(@"My photos array is ---%@",self.photos); 这将为您提供阵列中的确切内容。  
案例1:如果你有字典对象,那么: - 你应该NSDictionary *dict = self.photos[indexPath.row]; ClRecord *clRecord = [dict objectForKey:@"YourKeyForImage"];

案例2:如果您有预期的图像,那么请确保导入ClRecord头文件,在指定的[indexPath.row]索引处有非零对象和其他必要的初始化。
希望这会有所帮助。 Link1