2011-09-01 10 views
7

Tôi đã sử dụng ứng dụng đại biểu làm "nhóm toàn cầu" để chia sẻ dữ liệu giữa các bộ điều khiển chế độ xem khác nhau. Thông thường tôi làm điều gì đó như thế này:iOS chia sẻ 'dữ liệu chung' trên các bộ điều khiển chế độ xem

My_AppDelegate *appDelegate = (My_AppDelegate *)[[UIApplication sharedApplication] delegate]; 

Và sau đó, tôi sẽ dính dữ liệu vào ứng dụngXác định và nhận dữ liệu từ ứng dụngXóa với bộ điều khiển chế độ xem khác. Bằng cách nào đó, điều này có vẻ vụng về và không phù hợp (mặc dù nó không hoạt động).

Có cách nào tốt hơn không? Tôi có thể thiết lập "người nghe" trên một loại khu vực chia sẻ toàn cầu hay không, nếu ai đó dính một phần tử dữ liệu vào đó, một đối tượng khác sẽ nhận được 'gọi lại' để cho biết rằng ai đó có dữ liệu sẵn sàng?

Trong Java, chúng tôi đã từng làm điều này với lớp Observer/Observable - có thể có thứ gì đó như thế này hoặc tốt hơn trong iOS?

Trả lời

3

Một trình dọn dẹp, mặc dù không nhất thiết phải khác biệt, để thực hiện việc này là tạo một lớp đơn, ví dụ: AppData, mà bạn có thể truy cập bằng nhiều cách khác nhau và sẽ có sẵn cho tất cả các lớp khác của bạn. Nó có lợi ích của việc tách các công cụ cụ thể cho ứng dụng của bạn khỏi nội dung của ứng dụng. Bạn có thể xác định các lớp theo cách này:

 
@interface AppData : NSObject 

// Perhaps you'll declare some class methods here... 

@end 

Một điều chung tôi làm là xác định phương pháp lớp học trên lớp như vậy để truy cập, ví dụ, cài đặt giá trị, hoặc hằng số ứng dụng cụ thể hoặc đối tượng singleton khác. Có rất nhiều khả năng.

Cuối cùng, bạn có thể hoàn thành rất nhiều chỉ với phương pháp lớp học, mà bạn sẽ gọi một cái gì đó như [AppData theMethod]. Chỉ cần nhớ không có self để truy cập bên trong một phương thức lớp học.

Thực hiện thêm một bước nữa, bạn có thể xác định ivars cho lớp AppData và sau đó quản lý một cá thể đơn lẻ của AppData. Sử dụng phương pháp lớp học, ví dụ: +sharedInstance, để có được một xử lý cho singleton mà sau đó bạn có thể gọi mehods. Ví dụ: [[AppData sharedInstance] someMethod:myArgument]. Việc bạn triển khai +sharedInstance có thể là nơi bạn quản lý việc tạo ra thực đơn đơn lẻ, phương thức này cuối cùng sẽ trả về.

Tôi không chắc liệu tôi có muốn gọi phương pháp này là "thực hành tốt nhất" hay không, nhưng tôi thấy mẫu này khá tiện dụng.

+0

Có, tôi đã quên mất những người độc thân, và tôi sử dụng chúng trong Java mọi lúc .. Tôi sẽ thử .. – geekyaleks