1

我创建了一个包含 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 获得了一个 NSString:

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

这是我的 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];
4

3 回答 3

1

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

于 2009-06-02T05:05:15.667 回答
1

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

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

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

于 2009-06-02T05:11:49.247 回答
0

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

于 2009-06-02T05:57:11.647 回答