声明String然后从带有Cocoa的Path打开字符串

时间:2009-06-07 02:54:28

标签: cocoa

我声明了一个像这样的字符串

NSString * fileName = [files objectAtIndex:i];             的NSLog(文件名);

NSImage * imageFromBundle = [[NSImage alloc] initWithContentsOfFile:fileName];

并希望使用该文件名在不同的目录中打开文件。 我想出了这个

NSImage * imageFromBundle2; imageFromBundle2 = [[NSImage alloc] initWithContentsOfFile:@“/ Users / rhaynes / Documents / works4 /”filename];

任何帮助将不胜感激

2 个答案:

答案 0 :(得分:0)

我假设你的fileName字符串实际上是一个文件名,比如“myImage.png”。很多Objective-C文档在它们真正意味着文件路径时引用文件名 - 所以有时它会让人感到困惑。

您要做的是创建一个NSString,它表示要加载的文件的完整路径。例如,您可以说:

NSString * path = [NSString stringWithFormat: @"/Users/rhaynes/Documents/works4/%@", fileName];

该行使用提供的格式字符串和参数创建一个新的NSString(格式字符串中的%@表示应该在那里插入fileName的字符串值。)StringWithFormat是一个非常强大的函数,所以你一定要检查它在文档中。

然后你可以调用initWithContentsOfFile:path,它应该会给你你想要的图像。

答案 1 :(得分:0)

  

NSString * fileName = [files objectAtIndex:i];的NSLog(文件名);

不要将非硬编码字符串作为格式字符串参数传递。如果它们包含格式说明符,则会出现垃圾或崩溃。 (例如,请使用fileName = @"foo%sbar"尝试此操作。然后使用fileName = @"foo%fbar"进行尝试,以获得更多乐趣。)

你的NSLog声明应该是:

NSLog(@"%@", fileName);
  

[我]想使用该文件名打开不同目录中的文件。我想出了这个

NSImage* imageFromBundle2; imageFromBundle2 = [[NSImage alloc] initWithContentsOfFile:@"/Users/rhaynes/Documents/works4/" filename ];

你只能以这种方式连接字符串文字;正如你自己所看到的那样,当其中一个字符串不是文字时,这是一个语法错误。

首先,如果fileName 实际上是路径名,则需要使用lastPathComponent来获取实际文件名。所以:

NSString *path = [files objectAtIndex:i];
NSString *filename = [path lastPathComponent];

然后,使用stringByAppendingPathComponent:将其添加到新的超级路径上。

NSString *desiredFilenamePath = [directoryPath stringByAppendingPathComponent:filename];

现在您有了想要传递给NSImage初始化程序的路径名。