1

サブクラス化された NSTextFieldCell によって返される stringValue にファイル拡張子を追加しようとしています

知っていることやインターネットで見つけられることはすべて試しましたが、これは頭痛の種です

メソッドは次のとおりです。

- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView {

    NSMutableString *filename = [[NSMutableString alloc] init];
    [filename appendString:self.stringValue];

    NSString *iconFileName = [[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:filename] stringByAppendingPathExtension:@"png"];
    NSLog(@"%@", iconFileName);

}

ただし、戻り値には拡張子がありません。私も次のことを試しました:

filename = [NSString stringWithFormat: @"%@.png", filename];

これは、「.png」を除いた「ファイル名」文字列を返します。

同様に:

filename = [filename stringByAppendingString: @".png"];

「ファイル名」だけを返します

このセルが属する表の列は NSObject にバインドされており、データを列に送信するメソッドは次のとおりです。

- (NSString *) nationString {
    NSMutableString *string = [[NSMutableString alloc] init];
    int index = 0;

    if (nationAddress && nationAddress > 0x0) {
        index = [[[[controller database] nationsAddressIndex] valueForKey:[NSString stringWithFormat:@"%lli", nationAddress]] intValue];
        Nation *nationality = [[[controller database] nations] objectAtIndex:index];
        [string appendString:[nationality name]];
    }
    else {
        [string appendString:@"---"];
    }

    return string;
}

なぜこれが起こっているのか、または代替案を提案できる人はいますか? どんな助けでも感謝しますありがとう

4

3 に答える 3

0

これにより、拡張子を含む完全なパスが返されます。

NSString *path =  [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Default.png"];
NSLog(@"%@", path);

したがって、self.stringValue に拡張子が含まれていると仮定すると、メソッドは次のように動作するはずです。

- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView {    
    NSString *iconFileName = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:self.stringValue];
    NSLog(@"%@", iconFileName);
}

拡張子が含まれていない場合は、次のことを試してください。

- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView {
    NSString *strWithPath = [NSString stringWithFormat:@"%@.png", self.stringValue];
    NSString *iconFileName = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:strWithPath];
    NSLog(@"%@", iconFileName);
}
于 2012-11-20T03:00:54.347 に答える
0

これらは機能するはずです(タイプミスがなければ):

NSString* filename = @"abc";

NSString* result1 = [NSString stringWithFormat:@"%@.png", filename];

NSString* result2 = [filename stringByAppendingString:@".png"];

NSMutableString* result3 = [filename mutableCopy];
[result3 appendString:@".png"];

それらが機能していないように見える場合は、値の初期化または表示方法に問題があります。

ヒント:上記の各NSLog(@"The answer is %@", resultN);ステートメントの直後に ("resultN" を適切に変更して) ステートメントを配置して、何が得られるかを確認してください。別のオブジェクトから見ると、別の変数を見ている可能性があることに注意してください。

于 2012-11-20T03:53:42.950 に答える
0

テスト用です。このコードを使用して、ここで出力値を更新してみてください。

NSMutableString *filename = [[NSMutableString alloc] init];
[filename appendString:self.stringValue];
NSLog(@"text1: %@ ;", filename);

filename = [NSString stringWithFormat: @"%@.png", filename];
filename = [NSString stringWithFormat: @"%@.png%@", filename, filename];
NSLog(@"text2: %@ ;", filename);
于 2012-11-20T02:54:09.293 に答える