2010-08-18 41 views
6

Tôi muốn thêm một số khóa liên tục cho ứng dụng của mình, các hằng số này có thể được truy cập ở bất kỳ đâu trong chương trình. Vì vậy, tôi khai báo hằng số trong tập tin giao diện:Hằng số trong mục tiêu-c

#import <UIKit/UIKit.h> 
NSString * MIN_INTERVAL_KEY = @"MIN_INTERVAL_KEY"; 
NSString * MAX_TOBACCO_KEY = @"MAX_TOBACCO_KEY"; 
NSString * ICON_BADGE = @"ICON_BADGE"; 

@interface SmokingViewController : UIViewController { 
} 

Và tôi muốn để truy cập chúng từ lớp MinIntervalViewController:

- (void)viewDidAppear:(BOOL)animated { 
    NSUserDefaults *user = [NSUserDefaults standardUserDefaults]; 
    if (user) { 
     self.selectedValue = [user objectForKey:MIN_INTERVAL_KEY]; 
    } 
    [super viewDidAppear:animated]; 
} 

Nhưng việc áp dụng cho thấy một lỗi trong lớp MinIntervalViewController:

lỗi: 'MIN_INTERVAL_KEY' không khai báo (sử dụng lần đầu tiên trong chức năng này)

Tôi có bỏ lỡ điều gì đó không? Bất kỳ trợ giúp sẽ được đánh giá cao.

Cảm ơn

+0

thể trùng lặp của [Constants trong Objective C] (http://stackoverflow.com/questions/538996/constants-in-objective-c) – BadPirate

Trả lời

18

Constants.h

#import <Cocoa/Cocoa.h> 

@interface Constants : NSObject { 

} 

extern int const kExampleConstInt; 
extern NSString * const kExampleConstString; 

@end 

Constants.m

#import "Constants.h" 


@implementation Constants 

int const kExampleConstInt = 1; 
NSString * const kExampleConstString = @"String Value"; 

@end 

Cách sử dụng:

#import "Constants.h" 

Sau đó, chỉ cần gọi biến cụ thể mà bạn muốn sử dụng.

NSString *newString = [NSString stringWithString:kExampleConstString]; 
+0

Mỗi dòng bắt đầu với một @} hoặc trong mã của bạn có thể gỡ bỏ, IMHO :-) Có thực sự là không cần phải xác định một lớp học ở đây. – DarkDust

+0

Điều này có thể đúng, nhưng để nguyên cú pháp lớp trong việc giữ cho tệp phù hợp với mọi cặp đầu trang/triển khai khác trong một ứng dụng. Để mỗi của riêng mình. –

2

Trong file .h:

extern NSString * const MIN_INTERVAL_KEY; 

Trong một tập tin .m (!):

NSString * const MIN_INTERVAL_KEY = @"MIN_INTERVAL_KEY"; 

Và những gì bạn dường như đã bỏ qua là để thực sự import sự tập tin tiêu đề khai báo MIN_INTERVAL_KEY ;-) Vì vậy, nếu bạn khai báo nó trong SmokingViewController.h nhưng muốn sử dụng nó trong MinIntervalViewController.m, thì bạn cần phải import "SmokingViewController.h" trong số MinIntervalViewController.m. Vì Objective-C thực sự là nhiều hơn hoặc ít hơn một phần mở rộng cho C tất cả các quy tắc hiển thị C áp dụng.

Ngoài ra, điều giúp gỡ lỗi những thứ như thế là nhấp chuột phải vào tệp .m trong Xcode và chọn "Tiền xử lý". Sau đó, bạn sẽ thấy quá trình tiền xử lý tệp, tức là sau khi CPP đã thực hiện công việc của nó. Đây là những gì trình biên dịch C REALLY là tiêu hóa.