【问题标题】:#define URL as string in each .m file?#define URL 作为每个 .m 文件中的字符串?
【发布时间】:2025-12-03 20:30:01
【问题描述】:

我仍在尝试学习 Objective-C 并有一个从 Web 服务器下载文档的应用程序。 这些文档位于十个预定义的文件夹中,每个类别都有单独的类

我目前访问文件的方式是,在每个 .m 文件的顶部,我将父文件夹的 URL 定义为字符串,将子文件夹定义为单独的字符串:

#define WEBHOST @"http://webserverURL/mainfolder"
#define FOLDER @"subfolderName"

然后将它们连接起来:

NSString *pathString = [NSString stringWithFormat:@"%@%@", WEBHOST, FOLDER];
NSURL *documentsDirectoryURL = [NSURL URLWithString:pathString];
NSData *documentsHTMLData = [NSData dataWithContentsOfURL:documentsDirectoryURL];

然后,我使用 hpple 解析 HTML 并根据需要进行处理。我不确定这是否是一种特别有效的技术,但它似乎可以满足我的需要。 但是,它似乎有点混乱,我想我错过了一些更简单或更有效的方法来实现这一点。

我的问题:这是一种合理的做法,还是我犯了典型的新手罪行,使事情变得比需要的更复杂和混乱?

【问题讨论】:

  • 如果每个 .m 文件中的 WEBHOST 相同,则将其定义放在 .h 中并导入。这样,如果它发生变化,您只需修改一行而不是十行。
  • 啊——当然。我应该知道但忽略了。谢谢。

标签: objective-c string url concatenation c-preprocessor


【解决方案1】:

好吧,你可以这样做:

#define WEBHOST @"http://webserverURL/mainfolder"
#define FOLDER WEBHOST @"/subfolderName"

它应该将网络主机名称连接到文件夹名称。可能会节省一行代码。

【讨论】:

  • 我至少还建议:将 Webhost-definition 放入 pch-file,这样您就不需要在每个 .m 文件中重新定义它。
  • 你不使用@"first bit" "second bit"连接Objective-C字符串文字吗?
  • 不确定,但我要去尝试......好吧,它会生成一个 X-Code 警告:“格式字符串不是字符串文字(可能不安全)”......但是,是的,它确实有效。再次感谢,我在这里学到了一些不错的小技巧。
  • @Robert: 你确定你使用的是 Objective-C 字符串表示法(以@ 开头)而不是 C 表示法吗?
【解决方案2】:

您的方法很好,但我建议将所有定义放入一个头文件并包括在内。您必须重新定义WEBHOST,这可能会导致错误:

urldefs.h:

#define WEBHOST @"http://webserverURL/mainfolder"
#define SUBFOLDER1 @"subfolder1Name"
...
#define SUBFOLDER2 @"subfolder2Name"
#define SUBFOLDERn @"subfoldernName"

【讨论】:

  • 谢谢。这是否意味着创建一个名为 urldefs 的新 NSObject 文件,将定义放在 urldefs.h 文件中,在需要的地方导入并删除 urldefs.m 文件?
  • @Robert 不,你可以自己新建一个头文件。