在试图使用UIImage设置cell.image时出现障碍:imageNamed:

问题描述:

我创建了一个包含NSDictionary结构的plist。关键是一个标签(我用它来填充tableview cell.text),这个值是我想用来'动态'填充cell.image的文件名。确切的png文件名被加载到项目中。为了使事情变得更容易(所以我认为),我将plist加载到一个NSDictionary中,然后将其分解为两个数组(使用allKeys和allValues)。在试图使用UIImage设置cell.image时出现障碍:imageNamed:

在试图建立一个细胞图像,我不明白为什么这个工程:

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长度]:发送到实例0x262d910

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

让我k现在如果你需要更多的信息/代码。

编辑:这是我如何填充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 http://i42.tinypic.com/14uwffa.jpg [/ 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]; 
+0

嗯...我得重新检查一下。 rowImageList是一个数组,但我认为我正在将'NSStrings'推入数组(即NSString对象数组)。 下面是我如何填充rowImageList: \t NSArray * myRowImages = [[NSArray alloc] init]; \t myRowImages = [searchFilterList allValues]; \t self.rowImageList = [myRowImages copy]; \t [myRowImages release]; - 其中searchFilterList是我从plist中加载的NSDictionary。 – kindaran 2009-06-02 05:20:45

+0

好主,没有格式很好。 – kindaran 2009-06-02 05:21:21

+0

如果您正在跟踪,我最终更改了 “rowImageList = myRowImages;”到 “self.rowImageList = myRowImages;” 在尝试稍后在代码中使用rowImageList时发生了奇怪的垃圾。 – kindaran 2009-06-03 04:21:45

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

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

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

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

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