2012-06-01 26 views
9

Làm thế nào tôi có thể định nghĩa một phương thức có thể được gọi từ bất cứ đâu, trong mọi lớp trình điều khiển khung nhìn?iOS: Cách xác định phương thức công khai?

Tôi có một phương pháp mang đến cho tôi tệp json và tôi muốn nó có thể sử dụng lại được vì tôi có một số cuộc gọi json trên ứng dụng của tôi.

Bạn có thể giúp tôi?

+0

Singleton http://en.wikipedia.org/wiki/Singleton_pattern –

+0

rooster117 là đúng. Bạn đang đề cập đến một phương pháp tĩnh. Hãy nhớ rằng tất cả các phương thức đều được công khai trong Objective-C. Tuy nhiên, bạn có thể "ẩn" một phương thức hoặc gây ra một cảnh báo trình biên dịch bằng cách khai báo các phương thức trong một phần mở rộng của lớp. Tuy nhiên, họ không thực sự riêng tư. –

Trả lời

6

Bạn có thể thêm nó thông qua một thể loại:

EDIT

Tạo một .h cặp tập tin .m mới và trong file .h:

@interface UIViewController(JSON) 
-(void) bringJSON; 
-(void) fetchData:(NSData*) data; 


@ end 

Sau đó, trong. m tệp:

@implementation UIViewController(JSON) 

-(void) bringJSON { 

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 

[NSData dataWithContentsOfURL:yourURL]; 

[self performSelectorOnMainThread:@selector(fetchData:) 
withObject:data waitUntilDone:YES]; 

}); 

} 


-(void) fetchData:(NSData*) data { 

//parse - update etc. 

} 


@end 

Tôi chỉ giả định rằng y ou sẽ được trả lại một NSArray, bạn có thể đặt bất kỳ phương pháp ở đó và mở rộng tất cả UIViewControllers. Phương thức bringJSON sẽ có sẵn cho tất cả UIViewControllers và các lớp con của nó.

+0

woooo nó có vẻ thực sự người đàn ông awsome. Tôi sẽ cho nó nó một cơ hội! – 88fsantos

+0

Làm thế nào tôi có thể trả lại json của tôi, chỉ khi nó được nạp? : S Nếu tôi đặt nó bên trong de "dispatch_get_main_queue" nó nhận được một lỗi. – 88fsantos

+1

xem chỉnh sửa, vui lòng –

4

Tôi tin rằng bạn đang nghĩ về một phương pháp tĩnh sẽ được xác định bằng ký hiệu "+".

+ (String) yourFunctionName:(NSInteger)someValue ..... 

Sau đó, bạn có thể gọi nó là bất cứ nơi nào với tên lớp đầu tiên:

[YourClassName yourFunctionName:5]; 

Nếu bạn cần phải có một chức năng truy cập vào một đối tượng mà cần phải được khởi tạo sau đó bạn sẽ muốn làm một singleton mẫu.

2

Tôi cộng với câu trả lời đầu tiên vì đó là cách tạo (chủ yếu) một đối tượng khác với các phương thức có thể được gọi từ bất kỳ tệp nào bao gồm đối tượng đó. Hãy nhớ rằng mục tiêu-c cũng chỉ đơn giản là C. Bạn có thể có các tệp .c được bao gồm chỉ đơn giản là chứa các thường trình ANSI-C có thể được gọi.

+0

Tôi hiểu, Vấn đề của tôi với các phương thức lớp là, trả về của tôi là allways nhận được một lỗi, vì nó không thể sử dụng các biến mẫu. Có cách nào để sử dụng các biến lớp? Về những người độc thân, tôi nghĩ tôi đã đọc về nó. Singletons khác với các giao thức? Tôi đã cam kết từ lối vào và tôi đang sử dụng xcode kể từ khoảng một tháng trước. Vì vậy, nó là một chút khó khăn để làm những điều phức tạp hơn. Tks rất nhiều cho những người giúp đỡ oyur! – 88fsantos

+0

Bạn luôn có thể triển khai các đối tượng C++. Bằng cách này, bạn có thể cung cấp các biến được bảo vệ/riêng tư chỉ với quyền truy cập chức năng. XCode không có khả năng biên dịch các đối tượng C++ vào mã Objective-C của bạn. Tôi sẽ cố gắng tìm một số liên kết, nhưng đây là một bài viết về chủ đề (không có mã mẫu) trên StackOverflow. http: // stackoverflow.com/questions/406753/how-well-is-objective-c-được hỗ trợ – trumpetlicks

+0

tks man! tôi sẽ đọc rằng – 88fsantos

3

Sử dụng ký hiệu + trước kiểu trả về của phương thức.

Ví dụ:

+ (void) Name: (NSString *) str{ 

} 
Các vấn đề liên quan