2009-09-14 72 views
1

我有一個定義:#define stringFormat中的值?

hashdefine kPingServerToSeeIfInternetIsOn "http://10.0.0.8" 

然後在代碼中我使用它:

NSString *theURL = [NSString stringWithFormat:@"%@", kPingServerToSeeIfInternetIsOn]; 

我得到一個異常。

定義應用程序的常量並在NSString init中使用它的最佳方法是什麼?

+0

順便說一句,你可以簡化這個特殊的代碼用類似「的NSString * theURL = kPingServerToSeeIfInternetIsOn;」甚至更簡單,但用kPingServerToSeeIfInternetIsOn替換對URL的任何引用。 – Tyler 2009-09-15 02:16:57

回答

2

創建一個頭文件,例如MyAppConstants.h。添加以下內容:

extern NSString * const kPingServerToSeeIfInternetIsOn; 

在定義中,例如, MyAppConstants.m,添加:

NSString * const kPingServerToSeeIfInternetIsOn = @"http://10.0.0.8"; 

在你的類實現,添加:

#import "MyAppConstants.h" 

您可以使用常數作爲你已經做了。

+3

儘管我非常贊同使用const而不是定義,但我強烈反對創建一個像「MyAppConstants.h」這樣的文件。這使得代碼重用非常困難。將常量放在邏輯上提供它們的文件中,或者至少放在使用它們的文件中。但是不要爲所有系統常量創建一箇中央垃圾場。 – 2009-09-15 00:10:19

+0

有一個地方可以在同一個文件中有類常量。但是我發現只有少數頭文件(由較大的代碼函數組織)暗示了我的常量,這使得我的疑難解答變得更加容易。找到它們或者不得不從不同的地方重構一堆它們是沒有意思的。至少,爲您的常量開發一致且信息豐富的命名方案,並堅持像膠水一樣。 – 2009-09-15 01:35:16

9

您已將#定義爲C字符串。

如果你想把它當作一個Objective-C字符串,你需要

#define kPingServerToSeeIfInternetIsOn @"http://10.0.0.8"