2010-04-23 101 views
0

我有一個for循環設置按鈕上的背景圖片,基本上按鈕是不同的項目&不能靜態設置的縮略圖預覽,但因爲它貫穿所有的代碼給出了一個警告UIViews,但然後調用setBackgroundImage不適用於所有視圖。警告是一種刺激,我明白它在抱怨什麼,我該如何擺脫它? (我不想關閉警告,我想解決這個問題)警告設定代碼

// For loop to set button images 
for (UIView *subview in [self.view subviews]) // Loop through all subviews 
{ 
    // Look for the tagged buttons, only the 8 tagged buttons & within array bounds 
    if((subview.tag >= 1) && (subview.tag <= 8) && (subview.tag < totalBundles)) 
    { 
    // Retrieve item in array at position matching button tag (array is 0 indexed) 
    NSDictionary *bundlesDataItem = [bundlesDataSource objectAtIndex:(subview.tag - 1)]; 

    // Set button background to thumbnail of current bundle 
    NSString *picAddress = [NSString stringWithFormat:@"http://some.thing.com/data/images/%@/%@", [bundlesDataItem objectForKey:@"Nr"], [bundlesDataItem objectForKey:@"Thumb"]]; 
    NSURL *picURL = [NSURL URLWithString:picAddress]; 
    NSData *picData = [NSData dataWithContentsOfURL:picURL]; 
    // Warning is generated here 
    [subview setBackgroundImage:[UIImage imageWithData:picData] forState:UIControlStateNormal]; 
    } 
} 

回答

0

你可以這樣做:

for (id subview in [self.view subviews]) 

從而使id類型將停止任何類型檢查。 ..或檢查對象是否響應選擇器,並像這樣調用它:

if ([subview respondsToSelector:@selector(setBackgroundImage:forState:)]) { 
    [subview performSelector:@selector(setBackgroundImage:forState:) 
        withObject:[UIImage imageWithData:picData] 
        withObject:UIControlStateNormal]; 
} 

請注意,我從內存編碼最後一部分。

+0

真棒,這工作就像一個魅力,謝謝麥克,你是一個傳奇。 – 2010-04-23 13:48:32

0

的有這麼多的假設碼一個危險的一點,但是......你會先做好檢查向它發送了setBackgroundImage消息之前類的UIView,然後就簡單地投你的UIView刪除警告:

if ([subview class] == [UIButton class]) { 
    [((UIButton *)subview) setBackgroundImage:[UIImage imageWithData:picData] forState:UIControlStateNormal]; 
} 
+0

我更喜歡Mike的回答。 :) – gnasher 2010-04-23 07:45:53

+0

你的代碼工作完美,但我不能接受2個問題的答案,對不起肯尼,麥克用鼻子揍你。 (不是因爲他給了2個解決方案,但因爲他的答案包含一個簡單的解決方案和一個理想的解決方案) – 2010-04-23 13:55:29

+0

對不起這個肯尼但「代碼危險位」打擾你了你答案的一部分是關於我,這將是更安全的,而環通過數組並按照數組元素設置按鈕?那種情況下未使用的按鈕怎麼樣? (也許禁用依賴於[陣列計數]不必要的按鈕?) – 2010-04-24 11:55:44