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

Вы всегда получаете 2, потому что всегда делаете 1 + 1. Вы никогда не ссылаетесь на объект, который уже может быть в словаре или самом словаре, в процессе создания номера. Рассмотрите возможность использования '[dictionary count]' как значения 'origNumber'. – zneak

+0

'number' * is * 2 при добавлении объекта в словарь. Почему вы ожидаете другого результата? –

+0

Я также пробовал origNum + = 1; хотя он остается на 2. @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); 

Это увеличит ваше значение, и оно будет alwa ys продвигается вверх, а не всегда остается 2. Надеюсь, это имеет смысл.

Ключи предназначены для доступа к данным. Приращение ключа кажется неправильным использованием его цели (в целом). Если ключ был увеличен несколько раз, вам было бы сложно получить значение, потому что вы не знали бы, что такое новый ключ, отключив доступ к вашему объекту. Таким образом, вы всегда можете получить новый приращенный номер, потому что знаете, что его ключ является «числом».

+0

Привет, спасибо, что помогли. Я понимаю, в чем проблема. Мне нужно иметь int и добавлять в словарь, чтобы он был в цикле для ключа для увеличения. Я увеличиваю ключ, чтобы отслеживать объект, который я добавляю в NSDictionary. –

+0

Возникла ошибка с этим оператором: –

+0

С этим оператором возникает ошибка: [dictionary setObject @ ([словарь [@ "number"] intValue] +1) forKey @ "number"]; Должно ли быть: [dictionary setObject: @ ([словарь [@ "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

не уверен, что это правильный способ сделать это, оставит решение открытым. –

Смежные вопросы