0

我正在使用ARC,而且我幾乎可以肯定這是一個與內存相關的問題。能夠將對象添加到NSMutableDictionary,但嘗試訪問對象時出現'無法識別的選擇器'錯誤

我有幾個類:DiningHallMealStationDiningHalls使用可變字典存儲各種meals,並且每個meal使用另一可變字典存儲各種stations。當我嘗試從meal's stationList屬性訪問station,我得到以下錯誤:

下面是我測試調試代碼:之前我添加了一個新站到字典中,我試圖列出詞典的現有內容,給我下面的錯誤:

'NSInvalidArgumentException', reason: '-[__NSCFString name]: unrecognized selector sent to instance 

DiningHall類中:

- (void) addStation:(Station*)s toMeal:(NSString*) mealType { 

    Meal *m = [self.mealList objectForKey:mealType]; 
    NSArray* a = [m.stationList allKeys]; 
    for (Station* s in a) 
     NSLog(@"%@", s.name); //line generating error 
    [m addStation:s]; 

} 

內膳食類:

- (void)addStation:(Station *)station { 

    [self.stationList setObject:station forKey:station.name]; 
    //also tried [self.stationList setValue:station forKey:station.name]; 
} 

在膳食類的初始化:

self.stationList = [[NSMutableDictionary alloc] init]; 

原因我認爲這是與詞典中的問題是,當我取代stationList字典,一個可變的陣列,(並適當地調節測試代碼),它沒有崩潰。

回答

1

你的錯誤是在這行代碼:

NSArray* a = [m.stationList allKeys]; 
for (Station* s in a) 
    NSLog(@"%@", s.name); //line generating error 

因爲數組a包含的關鍵和字典的值。並且,由於您將該名詞的鍵設置爲station.name,因此數組a只包含字符串而不是基數。

嘗試:

NSArray* a = [m.stationList allValues]; 
for (Station* s in a) 
    NSLog(@"%@", s.name); //line generating error 
0

您設置station.name關鍵:

[self.stationList setObject:station forKey:station.name]; 

,然後嘗試訪問該電臺對象遍歷所有的鍵時:

for (Station* s in a) 
    NSLog(@"%@", s.name); 

但鑰匙只會給站名。你想要

NSLog(@"%@", [self.stationList objectForKey:s]); 
相關問題