Проблемы проверки значения ключа NSMutableDictionary - PullRequest
0 голосов
/ 17 ноября 2011

Я немного запутался в NSMutableDictionary, получая проверку ключа и значения для этого я сделал этот код.

    NSMutableDictionary *testDictionary=[NSMutableDictionary dictionary];
        //  NSMutableDictionary *testDictionary=[[NSMutableDictionary alloc]init];

        [testDictionary setObject:@"Muhammed Musthafa" forKey:@"10005"];
        [testDictionary setObject:@"Lubaba p" forKey:@"10006"];
        [testDictionary setObject:@"Sahala Banu" forKey:@"10007"];
        [testDictionary setObject:@"Vishnu k" forKey:@"10008"];
        [testDictionary setObject:@"Shabeer PP" forKey:@"10009"];
        [testDictionary setObject:@"Sabeehath " forKey:@"10010"];
        [testDictionary setObject:@"Anusha GS" forKey:@"10011"];
        [testDictionary setObject:@"JINI KS" forKey:@"10012"];
        [testDictionary setObject:@"Athulya T" forKey:@"10013"];
        [testDictionary setObject:@"Midhun KS" forKey:@"10014"];

        for(NSString *kk in testDictionary)
        {
            NSString *fName;
            if(kk==@"10006")
            {
                fName=[testDictionary objectForKey:kk];

            }
            if(kk==@"10007")
            {
                fName=[testDictionary objectForKey:kk];

            }
            if(kk==@"10013")
            {
                fName=[testDictionary objectForKey:kk];
            }
            NSLog(@"KEY=====%@ and  Value====%@",kk,fName);

        }
The out put value :

    2011-11-17 10:49:37.054 ArchiveData[2539:207] KEY=====10013 and  Value====
    2011-11-17 10:49:37.055 ArchiveData[2539:207] KEY=====10006 and  Value====
    2011-11-17 10:49:37.056 ArchiveData[2539:207] KEY=====10008 and  Value====
    2011-11-17 10:49:37.056 ArchiveData[2539:207] KEY=====10010 and  Value====
    2011-11-17 10:49:37.057 ArchiveData[2539:207] KEY=====10012 and  Value====
    2011-11-17 10:49:37.057 ArchiveData[2539:207] KEY=====10014 and  Value====
    2011-11-17 10:49:37.058 ArchiveData[2539:207] KEY=====10005 and  Value====
    2011-11-17 10:49:37.059 ArchiveData[2539:207] KEY=====10007 and  Value====
    2011-11-17 10:49:37.060 ArchiveData[2539:207] KEY=====10009 and  Value====
    2011-11-17 10:49:37.061 ArchiveData[2539:207] KEY=====10011 and  Value====
  1. почему эти три {(kk == @ "10006") if (kk == @ "10007") if (kk == @ "10013")}, если состояние возвращает false?

  2. Есть какой-нибудь другой способ проверки ключа идентификатора, подобный этому?

  3. Я видел, что тот же тип кодирования работает нормально в некоторых других кодировках, так что это зависит от любой другой конфигурации?

  4. как я могу проверить определенный ключ == @ "некоторое значение ключа"?

Ответы [ 2 ]

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

Возможно, вам лучше сравнить строки, используя [kk isEqualToString:@"10006"], чтобы сделать правильное сравнение строк вместо сравнения указателей.

0 голосов
/ 17 ноября 2011

код:

NSMutableDictionary *testDictionary=[NSMutableDictionary dictionary];
    //  NSMutableDictionary *testDictionary=[[NSMutableDictionary alloc]init];

    [testDictionary setObject:@"Muhammed Musthafa" forKey:@"10005"];
    [testDictionary setObject:@"Lubaba p" forKey:@"10006"];
    [testDictionary setObject:@"Sahala Banu" forKey:@"10007"];
    [testDictionary setObject:@"Vishnu k" forKey:@"10008"];
    [testDictionary setObject:@"Shabeer PP" forKey:@"10009"];
    [testDictionary setObject:@"Sabeehath " forKey:@"10010"];
    [testDictionary setObject:@"Anusha GS" forKey:@"10011"];
    [testDictionary setObject:@"JINI KS" forKey:@"10012"];
    [testDictionary setObject:@"Athulya T" forKey:@"10013"];
    [testDictionary setObject:@"Midhun KS" forKey:@"10014"];

    for(NSString *kk in testDictionary)
    {
        NSString *fName;
        if([kk isEqualToString:@"10006"])
        {
            fName=[testDictionary objectForKey:kk];

        }
        if([kk isEqualToString: @"10007"])
        {
            fName=[testDictionary objectForKey:kk];

        }
        if([kk isEqualToString:@"10013"])
        {
            fName=[testDictionary objectForKey:kk];
        }
        NSLog(@"KEY=====%@ and  Value====%@",kk,fName);

    }

вывод для вашего кода.

2011-11-17 12:47:59.910 test[12512:a0f] KEY=====10008 and  Value====(null)
2011-11-17 12:47:59.910 test[12512:a0f] KEY=====10010 and  Value====(null)
2011-11-17 12:47:59.911 test[12512:a0f] KEY=====10012 and  Value====(null)
2011-11-17 12:47:59.911 test[12512:a0f] KEY=====10014 and  Value====(null)
2011-11-17 12:47:59.912 test[12512:a0f] KEY=====10005 and  Value====(null)
2011-11-17 12:47:59.912 test[12512:a0f] KEY=====10007 and  Value====Sahala Banu
2011-11-17 12:47:59.912 test[12512:a0f] KEY=====10009 and  Value====Sahala Banu
2011-11-17 12:47:59.913 test[12512:a0f] KEY=====10011 and  Value====Sahala Banu
2011-11-17 12:47:59.913 test[12512:a0f] KEY=====10013 and  Value====Athulya T
2011-11-17 12:47:59.913 test[12512:a0f] KEY=====10006 and  Value====Lubaba p  

работает нормально.После 10007 у вас нет условия для 10009 и 10011. поэтому значение fName для этого не изменяется.
Когда вы используете оператор ==, вы сравниваете значения указателя.Это будет работать только тогда, когда сравниваемые объекты являются одним и тем же объектом с тем же адресом памяти.

...