2013-04-12 1 views
-1

У меня есть следующий метод:Ошибка при доступе к NSMutableDictionary по строкам, двумя разными способами?

-(QFFriend*)getFriendById:(NSString*)fid 
{ 
    TFLog(@"NList %@", self.nFlist); 
    TFLog(@":%@:%@:", @"3", fid); 
    TFLog(@"%@", [self.nFlist valueForKey:@"3"]); 
// TFLog(@"%@", [self.nFlist valueForKey:fid]); 
} 

И когда я запускаю его с комментарием, я получаю этот результат: (и аварии, потому что я ушел из возвращения)

2013-04-12 07:39:49:972 QF[42881:2311] NList { 
    2 = "<QFFriend: 0x1dd61970>"; 
    3 = "<QFFriend: 0x1dd76570>"; 
    4 = "<QFFriend: 0x1dd84a70>"; 
    7 = "<QFFriend: 0x1dd70760>"; 
} 
2013-04-12 07:39:49:974 QF[42881:2311] :3:3: 
2013-04-12 07:39:49:976 QF[42881:2311] <QFFriend: 0x1dd76570> 

Однако, если я раскомментируйте эту строку, я получаю еще один крах, может кто-нибудь объяснить, что может быть неправильным?

2013-04-12 07:43:28:736 QuizFuzz[42912:2311] NList { 
    2 = "<QFFriend: 0x1c5888c0>"; 
    3 = "<QFFriend: 0x1c5a5c30>"; 
    4 = "<QFFriend: 0x1c5acaf0>"; 
    7 = "<QFFriend: 0x1c5badf0>"; 
} 
2013-04-12 07:43:28:738 QF[42912:2311] :3:3: 
2013-04-12 07:43:28:740 QF[42912:2311] <QFFriend: 0x1c5a5c30> 
2013-04-12 07:43:28.741 QF[42912:907] -[__NSCFNumber length]: unrecognized selector sent to instance 0x1d8521b0 
2013-04-12 07:43:28:754 QF[42912:2311] ERROR: -[__NSCFNumber length]: unrecognized selector sent to instance 0x1d8521b0 
2013-04-12 07:43:28.756 QF[42912:907] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFNumber length]: unrecognized selector sent to instance 0x1d8521b0' 

Как два последних вызова не могут быть эквивалентны? Я отправляю строку в обоих случаях!

ответ

3

ошибка:

- [__ длина NSCFNumber]: непризнанные селектор направлен например

что означает fid является NSNumber не NSString

также, вы должны использовать objectForKey: скорее valueForKey: Получить объект из словаря

так попробовать это

[self.nFlist valueForKey:[fid stringValue]] 
+0

+1, но только из любопытства, зачем использовать 'description' вместо' stringValue'? – lnafziger

+0

Спасибо. Это просто весело, что я не мог понять это. Я подумал: «Я никогда не использовал nnnumber!», Но вы, я. – netigger

+0

@ lnafziger, потому что во время написания ответа я забыл, что есть 'stringValue' ... спасибо за внимание –

0

Я не уверен, почему вы получаете два различных сбоев при использовании того, что, казалось бы, очень похожий код. Но если вы хотите, чтобы исправить сбой, я считаю, что вызов вы ищете:

[self.nFlist objectForKey:@"3"]; 

NSDictionary Class Reference

/* обновление */ На самом деле, после прочтения ваших крешлогов больше и глядя на TFLogs , Я бы предположил, что объект fid, который проходит, является NSNumber, а не NSString, как вы ожидаете. Чтобы подтвердить это, вы можете выйти из системы: TFLog(@"fid.class: %@", fid.class); Это ведет журнал, а не описание, чтобы вы могли видеть, что у вас есть. NSNumber со значением 3 и NSString со значением @ "3" оба выходят как 3.