2013-09-07 2 views
-4

개체의 키가 증가하는 NSMutableDictionary에 개체를 할당하려고하지만 키로 할당 된 값 2가 계속 유지됩니다. 객체가 사전에 저장 될 때마다 어떻게 키를 증가시킬 수 있습니까?NSMutableDictionary에서 키를 증가시키는 방법

-(void)addToMutableDictionary:(NSString*)value 
{ 
    //declare variable 
    int keyNum = 1; 

    keyNum +=1; 

    NSNumber *number = [NSNumber numberWithInt: keyNum]; 
    int numToInc = [number intValue]; 
    number = [NSNumber numberWithInt:numToInc]; 

    //Then I'm adding to the Dictionary: 

    [dictionary setObject:value forKey:number]; 
} 

내 OUPUT이 항상 : 키의

수는 2

-----> 내가 가진 어떻게

을 일을 언제나 여기

내 방법입니다
// declare variable outside so that's its incremented and not reset to 
// 0 every time the function is executed. 
int keyNum = 0; 


-(void)addToMutableDictionary:(NSString*)value 
{ 



     keyNum +=1; 

     NSNumber *number = [NSNumber numberWithInt: keyNum]; 
     int numToInc = [number intValue]; 
     number = [NSNumber numberWithInt:numToInc]; 

     //Then I'm adding to the Dictionary: 

     [dictionary setObject: object forKey:number]; 
    } 
+1

항상 1 + 1을하기 때문에 항상 2를 얻습니다. 숫자를 만드는 과정에서 이미 사전이나 사전 자체에있을 수있는 개체를 참조하지 않습니다. 'origNumber'의 값으로'[dictionary count] '사용을 고려하십시오. – zneak

+0

'number' *는 사전에 객체를 추가 할 때 * 2입니다. 왜 다른 결과를 기대합니까? –

+0

나는 또한 origNum + = 1 시도했습니다; @Martin R –

답변

1

당신이하고있는 :

,
int origNumber = 1; 
origNumber+=1; 

이렇게하면 origNumber이 항상 2가 될 것이므로 아무 것도 실제로 증가하지 않습니다. 그렇기 때문에 귀하의 사전은 귀하가 기대하는 것보다 2이라는 키를 갖게됩니다.

실제로 키를 증가 시키더라도 이전 키 - 값 쌍이 계속있을 수 있습니다 (따라서 사전에는 키가 2 인 키 - 값 쌍이 있고 키가 3 인 다른 키 - 값 쌍이 있습니다. 예) 이전 키 - 값 쌍을 제거하지 않는 한

+0

도움 주셔서 감사합니다. :) –

3

나는 당신을 도우려고하지만 나는 얼마나 성공적 일지 확신하지 못합니다. 여기서 문제는 항상 1이라는 값으로 키를 시작한다는 것입니다. 그러면 값이 2 씩 증가합니다. 몇 가지 다른 방법으로 증가 시키려고했으나 상관없이 증가 시키지만 항상 1입니다.

나는 무엇을 성취하려고하는지 완전히 모르겠지만 사전에 두 개의 다른 키를 사용하여 원하는 '개체'와 '증분 키'를 추적하는 것이 좋습니다.

대신 키를 증가의 가치 증가 :

dictionary[@"number"] = @1; 

을하고 object 원하는 저장 :

dictionary[@"object"] = object; 

당신이 수를 증가 할 때 그럼 그냥 같은 것을 할 :

dictionary[@"number"] = @([dictionary[@"number"] intValue] + 1); 

그러면 값이 증가하고 알와 ys는 위로 움직이고, 항상 남아 있지 않습니다 2. 나는 이것이 의미가 있기를 바랍니다.

키는 데이터에 액세스하도록 설계되었습니다. 키를 증가시키는 것은 (일반적으로) 목적의 오용과 같습니다. 키가 몇 번 증가했다면 새로운 키가 무엇인지 모르기 때문에 값을 얻는 것이 어려워서 개체에 액세스하지 못하게 할 수 있습니다. 이렇게하면 키가 "숫자"라는 것을 알기 때문에 언제나 새로운 증가 된 숫자를 얻을 수 있습니다.

+0

안녕하세요. 도와 주셔서 감사합니다. 문제가 무엇인지 알 겠어. 나는 int를 가져야하고 키를 증가시키기 위해 루프에 있도록 Dictionary에 추가해야합니다. NSDictionary에 추가 할 객체를 추적하기 위해 키를 증가시킵니다. –

+0

이 문장에 오류가 있습니다 : –

+0

이 문장에 오류가 있습니다 : [dictionary setObject @ ([dictionary "@"number "] intValue] +1) forKey @"number "]; 다음과 같아야합니다 : [사전 setObject : @ ([dictionary "@"number "] intValue] +1) forKey : @"number "]; 몇 가지가 빠졌습니다 : setObject 및 forKey 이후 –

1

나는 생각하기에, 당신이 원하는 것은 간단한 코드이지만, 복잡하게 만드는 것처럼 보입니다. 나는 귀하의 요구 사항이 일부 object (나는 그 obj 또는 다른 여부를) 다른 키를 사전에 몰라 저장하는 것으로 가정합니다.내 가정이 맞다면, 당신은 간단하게 다음과 같이 수행 할 수 있습니다

for(int index=1; index<100; index++){ 
    NSNumber *number = [NSNumber numberWithInt:index];   
    [dictionary setObject: object forKey:number]; 
} 
+0

도움을 주셔서 감사합니다. :) –

0
int origNumber =0; 


-(void)methodToIncrementKey 
{ 
    origNumber+=1; 
    NSNumber *number = [NSNumber numberWithInt:origNumber]; 
    int numToInc = [number intValue]; 
    number = [NSNumber numberWithInt:numToInc]; 

    //Then I'm adding to the Dictionary: 

    [dictionary setObject: object forKey:number]; 
} 

나는 함수의 외부 키 변수를 넣어했다.

+0

이것이 올바른 방법인지 확실하지 않은 경우 솔루션을 열어 둘 수 있습니다. –

관련 문제