在尝试使用UIImage设置cell.image时感到困惑:imageNamed:

时间:2009-06-02 04:59:36

标签: iphone uiimage

我创建了一个包含NSDictionary结构的plist。键是一个标签(我用来填充tableview cell.text),值是我想用来“动态”填充cell.image的文件名。确切的png文件名被加载到项目中。

为了使事情变得更容易(我想),我将plist加载到NSDictionary中,然后将它分成两个数组(使用allKeys和allValues)。

在尝试设置细胞图像时,我不明白为什么会这样:

cell.image = [UIImage imageNamed:@"bad.png"];

这不是(在模拟器中 - 我在调试器中遇到应用程序崩溃和barfing):

cell.image = [UIImage imageNamed:[rowImageList objectAtIndex:indexPath.row]];

我可以将下一行放在第二段代码之前,它工作得很好,所以看来我从objectAtIndex得到一个NSString:

NSLog(@"Image name: %@", [rowImageList objectAtIndex:indexPath.row]);

我还尝试创建一个临时NSString并为其分配[rowImageList objectAtIndex:],然后使用该NSString提供imageNamed:。

以下是调试器的一些信息:

  

- [NSCFArray length]:无法识别的选择器发送到实例0x262d910

     

因未捕获而终止应用   例外   'NSInvalidArgumentException',原因:   '*** - [NSCFArray长度]:无法识别   选择器发送到实例0x262d910'

如果您需要更多信息/代码,请告诉我。

编辑:这是我填充rowImageList的方式:

NSArray *myRowImages = [[NSArray alloc] init]; 
myRowImages = [searchFilterList allValues]; 
self.rowImageList = [myRowImages copy]; 
[myRowImages release]; 
//where searchFilterList is an NSDictionary that I loaded from a plist

这是我的plist的截图: [IMG] [http://i42.tinypic.com/14uwffa.jpg] 1 [/ IMG]

编辑:修改后的rowImageList填充:

 NSMutableArray *myRowImages = [[NSMutableArray alloc] init];
 NSEnumerator *enumerator = [searchFilterList objectEnumerator];
 id object;

 while ((object = [enumerator nextObject])) {
     [myRowImages addObject:[object objectAtIndex:0]];
 }
 self.rowImageList = myRowImages; //edit: added self. prefix
 [myRowImages release];

3 个答案:

答案 0 :(得分:1)

我会仔细检查NSLog()的输出,并确保它不是包含NSString的数组。这就是错误告诉你的;你正在传递一个NSArray,在那里需要一个NSString。

答案 1 :(得分:1)

此错误表示[rowImageList objectAtIndex:indexPath.row]正在返回一个数组而不是预期的字符串。

打印值的原因是因为打印数组也需要在NSLog语句中指定%@。

尝试调试方法并检查[rowImageList objectAtIndex:indexPath.row]的类。它最有可能变成一个数组。

答案 2 :(得分:0)

你确定你的plist是键/字符串对,并且你没有以某种方式将名字包装在数组中吗?