Objective c NSMutableDictionary键值检查问题

Objective c NSMutableDictionary键值检查问题,objective-c,xcode4,if-statement,osx-snow-leopard,nsmutabledictionary,Objective C,Xcode4,If Statement,Osx Snow Leopard,Nsmutabledictionary,在NSMutableDictionary检索键和值检查时,我对我编写的代码有点困惑 NSMutableDictionary *testDictionary=[NSMutableDictionary dictionary]; // NSMutableDictionary *testDictionary=[[NSMutableDictionary alloc]init]; [testDictionary setObject:@"Muhammed Musth

在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====
  • 为什么这三个{(kk==@“10006”)if(kk==@“10007”)if(kk==@“10013”)}if状态返回false

  • 还有其他方法可以像这样检查id密钥吗

  • 我在其他一些编码中看到了相同类型的编码,所以这取决于其他配置

  • 如何检查特定键==@“某个键值”


  • 您最好使用
    [kk isEqualToString:@“10006”]
    来比较字符串,以便进行正确的字符串比较,而不是指针比较。

    代码:

    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值不会因此而更改。

    使用==运算符时,将比较指针值。只有当您正在比较的对象是完全相同的对象,位于相同的内存地址时,这才起作用。

    +1-此外,请参阅此链接以更好地解释字符串文字:当我使用[kk isEqualToString:@“10006”时,相同的输出出现了?所以问题是另一回事…我无法重现你的问题。您的代码中可能还有一些问题没有显示出来。