Проблема с объектом Dictionary - PullRequest
0 голосов
/ 01 ноября 2011

Я создал метод действия кнопки. Инициализировал NSDictionary со значениями из массива и назначенными ему значениями. При печати объектов словаря в консоли получается правильное значение. При назначении «NSString * value» значения печати, такие как Value, равны: 144964992. Но на консоли получаются правильные значения, такие как 0, 1,2, 3 ....

-(IBAction)takeDecision:(id)sender
    {
        NSLog(@"FINAL DECISION");
        NSMutableDictionary *dict =  [[NSMutableDictionary alloc]init];
        for(int i = 0; i < [choices count]; i++)
        {
            //[resultChoice indexOfObject:[NSNumber numberWithInt:i]];

            [dict setObject:[NSNumber numberWithInt:i] forKey:[choices objectAtIndex:i]];   
        }

        for (id key in dict) {

            NSLog(@"key: %@, value: %@", key, [dict objectForKey:key]);

        }




        for(int i = 0; i < [preferences count]; i++)
        {
            for(int j = 0; j < [choices count]; j++)
            {
                //NSLog(@"Number of cells: %d", [[myTable] numberOfRowsInSection:0]); // This writes out "Number of cells: 6"


                UITableViewCell *cell = [myTable cellForRowAtIndexPath:[NSIndexPath indexPathForRow:j inSection:i]];
                if(cell == nil) {
                    NSLog(@"CELL IS NIL");
                }

                NSArray *array = cell.contentView.subviews;
                NSLog(@"NUMBER OF OBJECTS: %d",[array count]);
                UIButton *test = (UIButton *)[array objectAtIndex:1];
                UIImage *newImage = [test currentBackgroundImage];
                NSLog(@"Image is %@",newImage.CGImage);

                NSLog(@"*************TEST VALUE IS:%@",[dict objectForKey:[choices objectAtIndex:j]]);

                NSString *value = [dict objectForKey:[choices objectAtIndex:j]];
                NSLog(@"--------> Value is: %d", value);
                if(newImage == [UIImage imageNamed:@"thumbsup_selected.png"])
                {
                    [dict setValue:[NSNumber numberWithInt: value+1] forKey:[choices objectAtIndex:j]];
                }
                NSLog(@"CELL IS NOT NIL");
            }
        }
        for (id key in dict) {

            NSLog(@"key: %@, value: %@", key, [dict objectForKey:key]);

        }
    }

Если кто-нибудь может предложить решение для него, будет полезно ... Заранее спасибо ...

Ответы [ 3 ]

1 голос
/ 01 ноября 2011

Вы пытаетесь напечатать строковое значение, используя "%d".%d для целочисленных значений. Правильный формат:

 NSLog(@"--------> Value is: %@", value);
1 голос
/ 01 ноября 2011

Причина в том, что когда вы печатаете в GDB, вы фактически печатаете значение NSNumber, которое кажется правильным в консоли. Но вы не можете напрямую взять NSNumber в NSString. Так что поменяй строчку

 NSString *value = [dict objectForKey:[choices objectAtIndex:j]];

до

            NSString *value = [NSString stringWithFormat: @"%d",[[dict objectForKey:[choices objectAtIndex:j]] integerValue]];
0 голосов
/ 01 ноября 2011

У вас есть словарь объектов NSNumber, но вы присваиваете один из этих объектов NSNumber строке NSString, даже если они относятся к разным типам объектов. Операция печати пытается распечатать NSNumber как строку NSSt, которая дает непредсказуемые результаты.

Вы можете использовать

NSString *value = [[[dict objectForKey:[choices objectAtIndex:j]] stringValue];

чтобы получить правильное значение в строке NSString.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...