我创建了一个包含NSDictionary结构的plist。键是一个标签(用于填充tableview cell.text),该值是我想要用来“动态”填充cell.image的文件名。确切的png文件名被加载到项目中。
为了使事情变得更简单(正如我想的那样),我将plist加载到一个NSDictionary中,然后将其分离成两个数组(使用allKeys和allValues)。
在试图设置一个单元格映像时,我不明白为什么这样做是有效的:
cell.image = [UIImage imageNamed:@"bad.png"];而这并不是(在模拟器中-我在调试器中得到一个应用程序崩溃和阻塞):
cell.image = [UIImage imageNamed:[rowImageList objectAtIndex:indexPath.row]];我可以将下一行放在第二段代码之前,它工作得很好,所以我似乎从objectAtIndex获得了一个objectAtIndex:
NSLog(@"Image name: %@", [rowImageList objectAtIndex:indexPath.row]);我还尝试创建一个临时NSString并将rowImageList objectAtIndex:分配给它,然后使用该NSString提供imageNamed:。
以下是调试器的一些信息:
-NSCFArray长度:发送到实例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这是我的剧本的截图: IMG

[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];发布于 2009-06-02 05:05:15
我将再次检查NSLog()的输出,并确保它不是包含NSString的数组。这就是错误告诉您的;您正在传递一个NSArray,其中期望有一个NSString。
发布于 2009-06-02 05:11:49
此错误意味着rowImageList objectAtIndex:indexPath.row返回的是数组,而不是预期的字符串。
打印值的原因是为了打印数组,还需要在NSLog语句中指定%@。
尝试调试该方法并检查rowImageList objectAtIndex:indexPath.row的类。它很可能是一个数组。
发布于 2009-06-02 05:57:11
您确定您的plist是键/字符串对,并且没有以某种方式将名称包装在数组中吗?
https://stackoverflow.com/questions/937957
复制相似问题