我声明了一个像这样的字符串
NSString * fileName = [files objectAtIndex:i]; 的NSLog(文件名);
NSImage * imageFromBundle = [[NSImage alloc] initWithContentsOfFile:fileName];
并希望使用该文件名在不同的目录中打开文件。 我想出了这个
NSImage * imageFromBundle2; imageFromBundle2 = [[NSImage alloc] initWithContentsOfFile:@“/ Users / rhaynes / Documents / works4 /”filename];
任何帮助将不胜感激
答案 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初始化程序的路径名。