声明字符串,然后使用 Cocoa 从路径打开字符串
Posted
技术标签:
【中文标题】声明字符串,然后使用 Cocoa 从路径打开字符串【英文标题】:Declare String then open string from Path with Cocoa 【发布时间】:2009-06-07 02:54:28 【问题描述】:我已经像这样声明了一个字符串
NSString* fileName = [files objectAtIndex:i]; NSLog(文件名);
NSImage* imageFromBundle = [[NSImage alloc] initWithContentsOfFile:fileName];
并希望使用该文件名打开不同目录中的文件。 我想出了这个
NSImage* imageFromBundle2; imageFromBundle2 = [[NSImage alloc] initWithContentsOfFile:@"/Users/rhaynes/Documents/works4/" 文件名];
任何帮助将不胜感激
【问题讨论】:
【参考方案1】:我假设您的 fileName 字符串实际上是一个文件名,例如“myImage.png”。许多 Objective-C 文档实际上是指文件路径时引用文件名 - 所以有时会令人困惑。
您要做的是创建一个 NSString 来表示您要加载的文件的完整路径。例如,你可以说:
NSString * path = [NSString stringWithFormat: @"/Users/rhaynes/Documents/works4/%@", fileName];
该行使用提供的格式字符串和参数创建一个新的 NSString(格式字符串中的 %@ 表示应该在其中插入 fileName 的字符串值。) StringWithFormat 是一个非常强大的函数,所以你一定要检查它在文档中。
然后你可以调用 initWithContentsOfFile:path,它应该会给你你想要的图像。
【讨论】:
哇你是男人。感谢您的快速回复,您让我更接近我的答案,但是我的日志文件显示了我的文件的完整路径,而不仅仅是 fiename 2009-06-06 23:22:40.188 appagain2[26864] Users/rhaynes/Documents /works4//Users/rhaynes/Documents/works3/work1.jpg 你知道像Users/rhaynes/Documents/works4/work1.jpg这样获取文件名的方法吗 好的。这意味着您的 fileName 变量实际上是一个完整路径。你真正想要的只是最后一部分:“work1.jpg”。然后,您可以将其附加到“正确”路径。 Objective-C 字符串类提供了一个名为 lastPathComponent 的简洁函数,它将只返回该部分。因此,在我输入答案的 stringWithFormat: 行中,只需将 fileName 替换为 [fileName lastPathComponent]。应该这样做!【参考方案2】:NSString* fileName = [files objectAtIndex:i]; NSLog(文件名);
不要将非硬编码字符串作为格式字符串参数传递。如果它们包含格式说明符,您将得到垃圾或崩溃。 (例如,用fileName = @"foo%sbar"
试试这个。然后用fileName = @"foo%fbar"
试试,以获得更多乐趣。)
你的 NSLog 语句应该是:
NSLog(@"%@", fileName);
[I] 想使用该文件名打开不同目录中的文件。我想出了这个
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 初始化程序的路径名。
【讨论】:
以上是关于声明字符串,然后使用 Cocoa 从路径打开字符串的主要内容,如果未能解决你的问题,请参考以下文章