无法附加到NSString

时间:2012-11-20 02:44:15

标签: objective-c cocoa nsstring nsmutablestring

我正在尝试将文件扩展名附加到由子类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 = [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;
}

任何人都知道为什么会发生这种情况,或者可以提出任何替代方案? 任何帮助将不胜感激 感谢

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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);
}

答案 2 :(得分: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”已正确更改)以查看您获得的内容。请记住,如果从不同的对象看,您可能会看到不同的变量。