0

在我的项目中,自过去 6 个月以来我一直在研究它,我使用#define 定义 FileManager 类中的所有 URL。但现在我知道我必须根据条件使用两个不同的 URL,因此我无法动态更改#define values.so 我决定在 FileManager 类中使用外部变量而不是 #define。

和接口文件一样

       extern NSString *Url;
       extern NSString *loginUrl;

在 m 文件中

        @implementation UrlManager
        + (void) initialize{
        Url=@"http://xxxxxxxxxx.com";
        loginUrl=[NSString stringWithFormat:@"%@%@",Url,@"/ipad.php?method=audLogin&username="];
             }

但是当我导入 URLManager.h 并使用 loginUrl 时,仍然是 null ,请帮助我如何初始化外部变量,以便我可以在应用程序中使用这些变量。

4

1 回答 1

2

首先,如果你有一个 URL,使用 NSURL 来引用它。

其次,一致地和描述性地命名你的全局变量。 AliRootURL并且AliLoginURL是描述性的,并且有一个前缀(Ali-- 更改它)以便于识别。

最后,根本不要使用全局变量。相反,在您的类上URLManager使用返回 URL 的类方法(实际上也应该加上前缀):

@interface AliURLManager:NSObject
+(NSURL*)rootURL; // no need to prefix methods in your custom classes
+(NSURL*)loginURL;
@end

这样,您可以实现这些方法以直接返回 URL:

+(NSURL*)rootURL
{
     // use a static and dispatch_once() if you want only one instance
     return [NSURL URLWithString:@"http://foobar.com/"];
}
+(NSURL*)loginURL
{
     NSURL* root = [self rootURL];
     NSURL* loginURL;
     ... calculate loginURL here... (http://stackoverflow.com/questions/718429/creating-url-query-parameters-from-nsdictionary-objects-in-objectivec)
    return loginURL;
}

这样,您可以轻松地重构您的代码,例如,从默认数据库中读取 URL 或为开发使用不同的配置。


太糟糕了——但我可以理解不更改大量文件的愿望。不过,应该是可搜索和可替换的(至少,如果您的变量更具描述性)。

如果要通过 初始化全局变量+initialize,则需要确保该类已被勾选。添加[URLManager class];到您的applicationDidFinishLaunching:

于 2013-05-24T16:58:03.707 回答