【发布时间】:2009-06-02 04:59:36
【问题描述】:
我创建了一个包含 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][]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];
【问题讨论】:
-
嗯...我得重新检查一下。 rowImageList 是一个数组,但我假设我正在将 NSStrings “推”到数组上(即 NSString 对象数组)。这是我填充 rowImageList 的方式: NSArray *myRowImages = [[NSArray alloc] init]; myRowImages = [searchFilterList allValues]; self.rowImageList = [myRowImages 副本]; [myRowImages 发布]; - 其中 searchFilterList 是我从 plist 加载的 NSDictionary。
-
天哪,格式不太好。
-
如果你跟着我,我最终改变了“rowImageList = myRowImages;”到“self.rowImageList = myRowImages;”稍后在代码中尝试使用 rowImageList 时发生了奇怪的废话。
-
我认为“奇怪的废话”包括崩溃?如果不使用访问器,您就会过度释放对象。新的分配是正确的。
-
是的,我相信我崩溃了。 “奇怪的行为”是在 cellForRowAtIndex 内,数组是“未定义的”。一旦我添加了自我。前缀,presto,不再未定义。