如果声明没有像我预期的那样工作

时间:2013-02-12 20:29:06

标签: objective-c cocoa if-statement

以下代码无效。没有错误信息或任何东西..它只是工作。 (图像未显示在应有的位置) imgdtl是一个NSMutableDictionary

        if ([NSString stringWithFormat:@"%@",[filePath pathExtension]] == @".jpg")
        {
            NSImage *myimage = [[NSImage alloc] initWithContentsOfFile:[NSString stringWithFormat:@"%@" ,filePath]];
            [imgdtl setObject: myimage forKey: @"image"];
            [imgdtl setObject:[NSString stringWithFormat:@"%@" ,fileName] forKey: @"filename"];
        }
        else{
            NSImage *myimage = [[NSImage alloc] initWithContentsOfFile:@"no_image.gif"];
            [imgdtl setObject: myimage forKey: @"image"];
            [imgdtl setObject:[NSString stringWithFormat:@"%@" ,fileName] forKey: @"filename"];
        }

但是这个有效:

            NSImage *myimage = [[NSImage alloc] initWithContentsOfFile:[NSString stringWithFormat:@"%@" ,filePath]];
            [imgdtl setObject: myimage forKey: @"image"];
            [imgdtl setObject:[NSString stringWithFormat:@"%@" ,fileName] forKey: @"filename"];

我想仅在格式为.jpg时加载图像,并且如果文件有任何其他扩展名,则希望不加载图像。有人可以告诉我我做错了什么吗?谢谢!

--- --- EDIT

感谢所有评论,但以下代码给出了与上面相同的问题:

     if ([[NSString stringWithFormat:@"%@",[filePath pathExtension]] isEqualToString @".jpg"])

5 个答案:

答案 0 :(得分:4)

有数百个重复。

您想要比较字符串的内容,而不是指针。  ==比较指针。要比较内容,请使用NSString的-isEqualToString:方法

if ([string isEqualToString :@"other string"]) .....

修改

在旁注中,将重复的代码移出条件块, 它们是相同的,所以不需要把它们放在那里两次:

NSImage *myImage;

if ([[filePath pathExtension] isEqualToString: @"jpg"])
    {
        myImage = [[NSImage alloc] initWithContentsOfFile: filePath]];

    }
    else{
        myImage = [[NSImage alloc] initWithContentsOfFile:@"no_image.gif"];
    }

[imgdtl setObject: myImage forKey: @"image"];
[imgdtl setObject: fileName forKey: @"filename"];

答案 1 :(得分:1)

您是否尝试在if语句中使用“isEqualToString:”方法? NSString有一个isEqualToString方法,它比较字符的两个字符串而不是使用==运算符。它有时会返回不同的结果。

答案 2 :(得分:1)

使用以下objective-c方法:[someString isEqualToString:someOtherString]来比较字符串

答案 3 :(得分:1)

if ([[NSString stringWithFormat:@"%@",[filePath pathExtension]] isEqualToString @".jpg"])
        {
            NSImage *myimage = [[NSImage alloc] initWithContentsOfFile:[NSString stringWithFormat:@"%@" ,filePath]];
            [imgdtl setObject: myimage forKey: @"image"];
            [imgdtl setObject:[NSString stringWithFormat:@"%@" ,fileName] forKey: @"filename"];
        }
        else{
            NSImage *myimage = [[NSImage alloc] initWithContentsOfFile:@"no_image.gif"];
            [imgdtl setObject: myimage forKey: @"image"];
            [imgdtl setObject:[NSString stringWithFormat:@"%@" ,fileName] forKey: @"filename"];
        }

答案 4 :(得分:1)

您应该比较这样的字符串:

if ([[NSString stringWithFormat:@"%@",
    [filePath pathExtension]] isEqualToString:@"jpg"])

...因为==是一个指针比较,你(这次)对两个文本字符串的内容感兴趣,而不是它们是否指向相同的内存位置。