2012-01-24 2 views
1

설정 한 사전의 특정 값을 검사하는 조건부를 작성하려고합니다.NSPredicate에서 숫자 NSDictionary 키에 액세스하십시오.

이 사전에는 액세스하려는 키로 "0", "1"및 "2"의 문자열 버전이 있습니다.

내가 쓰고 싶은 술어는 다음과 같습니다

$ player.currencyDictionaries.0.earned> 1000

문제는 0.0 허용되지 않는 것입니다. 사전을 저장하는 방법을 쉽게 바꿀 수 없다고 가정하면 (이전 버전이므로 모든 버전에서 동일한 조건부를 서버에서 호스팅 할 때 사용하고 싶습니다.) 데이터에 액세스 할 수있는 방법이 있습니까?

답변

2

IIRC, 당신은이 작업을 수행 할 수 있습니다

$player.currencyDictionaries[0].earned > 1000 

주 (당신은 전달 된 값은 문자열과 숫자가 아닌 것을 보장하기 위해 ['0']을해야 할 수도 있습니다) 그 구문 ([0]) 만이 술어 형식 문자열에서 작동합니다. 키 경로에서는 작동하지 않습니다.

이 구문은 술어 BNF의 "Index Expression"섹션에서 정의됩니다.


편집

사실이 작동하고, 그 이유는되지 않습니다

문자열 "$player.currencyDictionaries[0].earned" 읽고 유형 NSKeyPathExpressionNSExpression으로 켜집니다. 즉, 평가할 때 기본적으로 해당 문자열을 가져와 수신기의 -valueForKeyPath: 메서드를 통해 실행합니다. 앞에서 언급했듯이 대괄호 구문은 키 경로에서 작동하지 않으므로 잘못된 답변이 생성됩니다. 그러나

, 당신은 currencyDictionaries 다시 표시 NSDictionaryNSDictionaryoverrides the -valueForKey: method 때문에, 당신은 리터럴 문자열로 돌려, 주요 경로로 [0] 비트를 설정할 수 있습니다 알고 있기 때문에 :/: HTTP 당으로

$player.currencyDictionaries.'0'.earned 
+0

을 /stackoverflow.com/questions/1767374/hyphen-in-nsdictionary-key 내 술어를 작성하는 것은이 작품 같은 것을 테스트하고 확인했습니다 : $ player.currencyDictionaries.'0'.earned> 1000 – M2tM

+0

귀하의 솔루션 아무튼 ' 내 특정 술어에 대한 작업, 난 예외 : 잡힌 : - [ __NSCFDictionary setObject : forKey :] : nil 값 삽입 (키 : 목록) – M2tM

+0

나는 내 자신의 질문에 대답 하겠지만 내 평가로 인해 그럴 수 없습니다. – M2tM