2013-07-21 61 views
0

我想添加從外部服務獲取的圖像到NSMutableDictionary並看到奇怪的結果。這是我在做什麼:使用UIImage不工作迭代NSMutableDictionary

- (void)fetchImages{ 
//Fetch Item Brand Images 
//self.itemBrands is an NSArray of NSDictionaries 
for (NSDictionary *itemBrand in self.itemBrands){ 

    NSString *currentItemId = [itemBrand objectForKey:@"ITEM_ID"]; 

    //Valid Item Id. This Log message is displayed 
    NSLog(@"Current Item Id: %@",currentItemId); 

    NSString *currentItemImageUrl = [[IMAGE_URL stringByAppendingString:currentItemId] stringByAppendingString:@".png"]; 

    //Image URL is valid. This log message is displayed 
    NSLog(@"Current Image URL: %@",currentItemImageUrl); 

    NSURL *url = [NSURL URLWithString:currentItemImageUrl]; 
    NSData *data = [NSData dataWithContentsOfURL:url]; 
    UIImage *image = [UIImage imageWithData:data]; 
    if (image == nil){ 
     //This log message is displayed when image is not present 
     NSLog(@"Image not Present 1"); 
    }else{ 
     //This log message is displayed when image is present 
     NSLog(@"Image Present 1"); 
     [self.itemBrandImages setObject:image forKey:currentItemId]; 
    } 

} 

//This for loop is not being executed at all. No log messages displayed. 
for(id key in self.itemBrandImages){ 

    NSLog(@"Current Item Id2: %@",key); 
    if ([self.itemBrandImages objectForKey:key] == nil){ 
     NSLog(@"Image Not Present 2"); 
    }else{ 
     NSLog(@"Image Present 2"); 
    } 
} 
} 

for循環我在哪裏遍歷self.itemBrandImages第二屆未在所有執行。沒有內部的日誌消息正在顯示。

我想在這裏張貼了我的問題之前,以下內容:

1)研究類似的堆棧溢出,從其中的一個問題,並納入建議。建議是在.m文件的init方法中「執行NSMUtableDictionary的alloc init」。這也沒有幫助。

2)爲了找出問題,我甚至嘗試添加一個簡單的字符串到NSMUtableDictionary而不是圖像,但即使這似乎並沒有保留。

我真的很困惑,因爲我在這裏失蹤或做錯了。輸入真的很感激。

謝謝, 邁克·G

+2

不' 「圖片當前第1張」'得到印?如果是這樣,是否'self.itemBrandImages'不同於'nil'? – yonosoytu

+0

也許在兩個for循環之間顯示所有的NSLog輸出以及'NSLog(@「%@」,self.itemBrandImages)'。 –

回答

1

也許:

for(NSString *key in [self.itemBrandImages allKeys]) 
+1

這沒有什麼區別。快速枚舉NSDictionary枚舉字典鍵。 –

+0

然後他可能忘記了:'self.itemBrandImages = [NSMutableDictionary dictionary];' – Peres

+0

也許,但是在「1)研究了類似的問題......」他在這個問題中聲稱事實並非如此。 –

0

我做了NSMutableDictianary的頁頭初始化就在我fetchImages方法和它的工作!不知道爲什麼init方法中的alloc init不起作用。

因此,這裏有從這個問題我的外賣:

1)如果你有一個數組或字典@property你是剛開始和設置,並沒有真正添加或刪除的對象,那麼你不需要明確地分配init它們。

2)如果您有添加或刪除對象的數組或字典@property,則需要顯式地分配它們。

我的上述陳述是否屬實?很想聽聽你的意見。

謝謝, 邁克

新代碼:

- (void)fetchImages{ 
    //Fetch Item Brand Images 
    self.itemBrandImages = [[NSMutableDictionary alloc] init]; 
    for (NSDictionary *itemBrand in self.itemBrands){ 

    NSString *currentItemId = [itemBrand objectForKey:@"ITEM_ID"]; 
    NSLog(@"Current Item Id in ItemList: %@",currentItemId); 
    NSString *currentItemImageUrl = [[@"http://anythingtogo.freeiz.com/images/"stringByAppendingString:currentItemId] stringByAppendingString:@".png"]; 
    NSLog(@"Current Image URL in ItemList: %@",currentItemImageUrl); 

    NSURL *url = [NSURL URLWithString:currentItemImageUrl]; 
    NSData *data = [NSData dataWithContentsOfURL:url]; 
    UIImage *image = [UIImage imageWithData:data]; 

    if (image == nil){ 
     NSLog(@"Image not Present 1"); 
    }else{ 
     NSLog(@"Image Present 1"); 
     [self.itemBrandImages setObject:@"Test" forKey:currentItemId]; 
    } 

    }