【问题标题】:Accessing an instance throws exception - NSDictionary NSArray访问实例引发异常 - NSDictionary NSArray
【发布时间】:2014-06-13 00:27:51
【问题描述】:

我是 Objective-C 的初学者,在字典和数组方面确实有点吃力。

我的目标是创建一个表格视图,其中每个单元格都包含来自服务器的图片。图片的 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

这似乎与类型有关。尝试访问数组,同时访问字典或类似内容。我在堆栈上找到了一些相关的帖子,但目前无法解决。

感谢您的帮助!

【问题讨论】:

标签: ios objective-c exception nsarray nsdictionary


【解决方案1】:

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

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

【讨论】:

  • 这可能是正确的轨道,我更改了以下行: NSDictionary *photos = self.photos[indexPath.row];至:ClRecord *clRecord = self.photos[indexPath.row];并将 CLRecord 声明为 NSObject。我也想知道,为什么 exaelmp 的标题文本仍然有效。问题是,来自 stanford 的示例使用的是 NSDictionaries,而来自 Apple 的示例使用的是数组,我无法弄清楚如何在这种特殊情况下合并示例。你能提示我如何解决这个问题吗?
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-08
    • 1970-01-01
    • 2017-01-17
    • 2012-03-21
    • 2012-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多