0

以下代码不起作用。没有错误消息或任何东西..它只是正常工作。(图像未显示在应有的位置) 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 的情况下加载图像,并且如果文件有任何其他扩展名,我希望它不加载。有人可以告诉我我做错了什么吗?谢谢!

- -编辑 - -

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

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

5 回答 5

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"];
于 2013-02-12T20:35:57.080 回答
1

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

于 2013-02-12T20:35:57.627 回答
1

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

于 2013-02-12T20:36:03.017 回答
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"];
        }
于 2013-02-12T20:41:52.097 回答
1

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

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

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

于 2013-02-12T20:42:20.393 回答