如何在不使用对象或类方法的情况下调用另一个类的变量?

时间:2013-05-27 06:22:24

标签: ios objective-c macros

在我的应用中,公共类中有一个常量,定义为

#define IMG_INIT_URL @"http://www.xxxx/index.php"

现在我需要将其更改为变量。但我的问题是我在代码中频繁使用此常量,例如:

NSString *imgUrlString = [NSString stringWithFormat:@"%@%@",IMG_INIT_URL,[[[storeDet objectForKey:@"store_imgurls"] objectAtIndex:0]objectForKey:@"simg_imgurl"]];

当我将其更改为变量时,我必须通过对象或类方法来检索它,这需要在我的代码中进行大量编辑。那么我可以像现在一样维护代码(即,不使用对象或类方法访问变量)吗?

5 个答案:

答案 0 :(得分:1)

您始终可以在.pch文件中定义它,该文件通常位于Supporting Files文件夹中,因此您需要在任意位置使用它。我个人还包括一些我需要在不同类中使用的类。然后,我不需要包括我使用的每个班级。

答案 1 :(得分:1)

假设您在名为imgURL的单例类中定义属性Constants,您可以这样做:

#define IMG_INIT_URL [Constants sharedInstance].imgURL

另外,请查看XCode在Edit>下的重构。 Refactor

答案 2 :(得分:1)

您可以将定义更改为

#define IMG_INIT_URL [UIApplication.sharedApplication imgInitURL]

然后在您的UIApplication子类或UIApplication类别中添加- (NSString *)imgInitURL方法。或者,如果更方便的话,将方法添加到应用程序委托中,并相应地修改定义。

答案 3 :(得分:0)

您可以使用NSUserDefault,如下所示

[[NSUserDefaults standardUserDefaults] setValue:@"http://www.xxxx/index.php" forKey:@"IMG_INIT_URL"];

并使用你想要的whereevr访问它。

 NSString *aReturnValue = [[NSUserDefaults standardUserDefaults] valueForKey:@"IMG_INIT_URL"];

答案 4 :(得分:0)

您可以通过在AppDelegate类中设置变量来实现。在AppDelegate.h中创建一个给定的变量,

@property (strong, nonatomic) NSString *imageInitURL;

在AppDelegate .m文件中合成

@synthesize imageInitURL;

然后,如果您想最初设置该值,您可以在“application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions”方法中设置该方法

[self setImageInitURL:@"http://www.xxxx/index.php"];

然后你可以通过appDelegate共享实例(如给定的

)从任何类访问它
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
[appDelegate imageInitURL];

您可以从任何类(如给定的

)为此设置新值
[appDelegate setImageInitURL:@"your new URL"];

希望这会对你有所帮助:)。