2009-06-02 55 views
1

我創建了一個包含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

回答

1

我會仔細檢查NSLog()的輸出,並確保它不是一個包含NSString的數組。這就是錯誤告訴你的。你傳遞一個NSString的NSArray的地方。

1

此錯誤表示[rowImageList objectAtIndex:indexPath.row]正在返回數組而不是字符串。

打印值的原因是因爲要打印數組,還需要在NSLog語句中指定%@。

嘗試調試方法並檢查[rowImageList objectAtIndex:indexPath.row]的類。它很可能會成爲一個數組。

0

你確定你的plist是鍵/字符串對,並且你沒有以某種方式將名稱包裝在數組中嗎?