1

我有以下问题:一个用 Objective-C 编写的 iOS 应用程序(像往常一样),它使用用 C 编写的部分代码。C 代码是应用程序的核心,用 Objective-C 编写的代码使用 C 完成的工作并协调整个应用程序。

为了完成它的工作,C 代码从首选项文件中读取一些内容,该首选项文件的名称在 C 文件中连接。是否可以(在 C 代码中)在运行时而不是在编译时读取文件名?这个想法是用 Objective-C 修改一个字符串,让 C 代码读取那个字符串。

4

2 回答 2

4

看起来你在 C 文件中有一个硬编码的文件名。这不是一个好的设计。在 iOS 应用程序中,您永远不知道路径名称是什么,并且当前文件夹的概念在 GUI 应用程序中是混乱的。使文件名成为 C 函数的参数,并从 Objective C 端传递它以及完整路径。根据文件的位置,它可以在您的应用程序包中,或在文档文件夹中,或其他地方 - 您知道得更好。

是的,您可以将文件名设为变量而不是常量。变量数据类型将是char*.

编辑回复:评论:要解决此问题,请尝试从 ObjC 端设置当前文件夹。在调用 C 函数之前, call [NSFileManager setCurrentDirectoryPath:],传递文件所在的文件夹(同样,我不知道它可能是什么)。然后硬编码的文件名就可以工作了。

于 2013-09-24T15:55:43.917 回答
2

假设您的.c文件看起来像这样:

#include <stdbool.h>

static const char *_prefsFilename = "userprefs.css";

bool readPrefs() {

    FILE *fp = fopen(_prefsFilename, "r");
    ....
}

然后,您只需添加一个函数以允许_prefsFilename在尝试使用它打开文件之前进行设置:

void setPrefsFilename(const char *prefsFilename) {
    _prefsFilename = prefsFilename;
}

并确保在调用之前调用它readPrefs()

当然,这都是假设,但这就是我必须处理的全部内容。

于 2013-09-24T16:07:13.347 回答