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 回答