2012-08-13 30 views
11

thể trùng lặp:
Constants in Objective CLàm thế nào để khai báo và sử dụng NSString hằng toàn cầu

tôi lưu trữ một số cài đặt ứng dụng trong NSUserDefaults. NSStrings được sử dụng làm khóa. Vấn đề là tôi cần phải truy cập các cài đặt này trong suốt ứng dụng bằng cách sử dụng các khóa NSString đó. Có một cơ hội mà tôi nhập nhầm chuỗi khóa như vậy khi truy cập vào một số phần của ứng dụng.

suốt ứng dụng, tôi có phát biểu như vậy

[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"ReminderSwitch"]; 

BOOL shouldRemind = [[NSUserDefaults standardUserDefaults] boolForKey:@"ReminderSwitch"]; 

Làm thế nào và ở đâu tôi có thể khai báo một NSString toàn cầu liên tục mà tôi có thể truy cập toàn bộ ứng dụng. Sau đó tôi sẽ có thể sử dụng hằng số đó mà không phải lo lắng về việc nhập sai các phím chuỗi đó.

Trả lời

5

Điều bạn có vẻ đang tìm kiếm chỉ là một cách để xác định hằng số chuỗi trong ứng dụng của bạn.

Xem this questionthis answer với nó, mà tôi đã trích dẫn dưới đây:

Bạn nên tạo một tập tin tiêu đề như

// Constants.h 
FOUNDATION_EXPORT NSString *const MyFirstConstant; 
FOUNDATION_EXPORT NSString *const MySecondConstant; 
//etc. 

Bạn có thể bao gồm tập tin này trong mỗi tập tin có sử dụng các hằng số hoặc trong tiêu đề được biên dịch trước> cho dự án.

Bạn xác định các hằng số trong một file .m như

// Constants.m 
NSString *const MyFirstConstant = @"FirstConstant"; 
NSString *const MySecondConstant = @"SecondConstant"; 

Constants.m nên được thêm vào mục tiêu ứng dụng của bạn/khuôn khổ của để nó được liên kết vào sản phẩm cuối cùng.

Ưu điểm của việc sử dụng các hằng chuỗi thay vì # hằng define'd là bạn có thể kiểm tra bằng cách sử dụng con trỏ so (stringInstance == MyFirstConstant) đó là nhanh hơn nhiều so với chuỗi so ([stringInstance isEqualToString:MyFirstConstant]) (và dễ đọc hơn, IMO).

Với nhờ Barry Wark :)

+0

ông chỉ muốn các hằng số trong ứng dụng (nội bộ li nkage) vì vậy tôi tự hỏi tại sao bạn đang gợi ý anh ta xuất chúng (liên kết bên ngoài)? – malhal

9

suy nghĩ của bạn là đúng tôi nghĩ. Ví dụ, tôi đã tập Const.h/m như dưới đây:

Const.h

extern NSString *const UserIdPrefKey; 
extern NSString *const PasswordPrefKey; 
extern NSString *const HomepagePrefKey; 

Const.m

#import "AEConst.h" 

NSString *const UserIdPrefKey = @"UserIdPrefKey"; 
NSString *const PasswordPrefKey = @"PasswordPrefKey"; 
NSString *const HomepagePrefKey = @"UrlHomepagePrefKey"; 

Chỉ Const.h phải nhập khẩu.

Khi bạn viết mã, Xcode hỗ trợ viết tên khóa sao cho bạn có thể tránh việc nhập sai.

5

Cách dễ nhất để thực hiện việc này là tạo tệp .h đơn giản, như Utils.h và viết có đoạn mã sau:

#define kUserDefaults @"ReminderSwitch"

+3

vâng, không an toàn, có một cơ hội cho một số tệp mục tiêu c khác ghi đè lên mà không bị chú ý: ( – thndrkiss

13

Trước tiên, bạn nên đi cho một C biểu tượng extern thực - không phải là một vĩ mô. này được thực hiện như sau:

SomeFile.h

extern NSString *const MONConstantString; 

SomeFile.m

NSString *const MONConstantString = @"MONConstantString"; 

lưu ý rằng nếu bạn sử dụng một kết hợp của ObjC và ObjC++, bạn sẽ cần phải xác định extern "C" cho C++ TUs - đó là lý do tại sao bạn sẽ thấy xuất khẩu #define d thay đổi theo ngôn ngữ.


Sau đó, bạn sẽ muốn đặt hằng số gần các giao diện có liên quan. Lấy ví dụ của bạn làm khách hàng tiềm năng, bạn có thể muốn một bộ giao diện hoặc khai báo cho tùy chọn của ứng dụng. Trong trường hợp đó, bạn có thể thêm việc kê khai để MONAppsPreferences tiêu đề:

MONAppsPreferences.h

extern NSString *const MONApps_Pref_ReminderSwitch; 

MONAppsPreferences.m

NSString *const MONApps_Pref_ReminderSwitch = @"MONApps_Pref_ReminderSwitch"; 

trong sử dụng:

#import "MONAppsPreferences.h" 
... 
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:MONApps_Pref_ReminderSwitch]; 
Các vấn đề liên quan