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"]) .....

編集

補足として、重複するコードを条件付きブロックから移動します。それらは同じであるため、2 回配置する必要はありません。

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 ([[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"])

...これ==はポインター比較であり、(今回は) 2 つのテキスト文字列が同じメモリ位置を指しているかどうかではなく、それらの内容に関心があるためです。

于 2013-02-12T20:42:20.393 に答える
1

if ステートメントで「isEqualToString:」メソッドを使用してみましたか? NSString には、== 演算子を使用する代わりに、文字ごとに 2 つの文字列を比較する isEqualToString メソッドがあります。場合によっては、異なる結果が返されます。

于 2013-02-12T20:35:57.627 に答える
1

次の目的の c メソッドを使用します: [someString isEqualToString:someOtherString] を使用して文字列を比較します。

于 2013-02-12T20:36:03.017 に答える