2009-02-05 41 views
6

Tôi có một ứng dụng cho phép người dùng xem, thao tác và quản lý bộ sưu tập các đối tượng Lịch biểu. Các phần khác nhau của ứng dụng cần truy cập vào dữ liệu này. Tôi đã thử nghiệm với việc làm cho bộ sưu tập một singleton, nhưng tôi đã không thấy rằng rất sạch sẽ.Bạn đặt dữ liệu ứng dụng toàn cầu vào ứng dụng iPhone ở đâu?

thời gian gần đây tôi đã thay đổi để lưu trữ các dữ liệu toàn cầu trong lớp appdelegate và sử dụng:

MyAppDelegate *delegate = [[UIApplication sharedApplication] delegate]; 
[delegate.myGlobalData doSomething]; 

nào loại bỏ sự cần thiết cho dữ liệu toàn cầu của tôi là một singleton, nhưng thực sự chỉ là lợi dụng việc singleton UIApplication.

Có thực sự không chỉ là một bộ điều khiển chế độ xem chính nơi lưu trữ nó trong trường hợp của tôi có ý nghĩa. Vì vậy, tôi đã tự hỏi những chiến lược khác nhau mà mọi người sử dụng để giải quyết vấn đề này.

Trả lời

6

Nếu bạn có một mô hình dữ liệu trung tâm cần phải truy cập được cho nhiều bộ điều khiển, không có gì sai khi sử dụng singleton để quản lý dữ liệu-- "sharedManager" chính xác là những gì kịch bản yêu cầu. Đây chính là những gì Apple làm với API sổ địa chỉ của họ để thao tác các liên hệ. Họ sử dụng một API kiểu C nhưng nó liên quan đến việc tham chiếu đến cơ sở dữ liệu sổ địa chỉ dùng chung và sau đó sử dụng nó trong các cuộc gọi trong tương lai.

Sử dụng ủy nhiệm ứng dụng cũng hoạt động, nhưng khi bạn lưu ý nó thực sự giống nhau. Bạn đang chỉ định ứng dụng ủy nhiệm singleton làm chủ sở hữu của mô hình dữ liệu, cũng là OK.

NSUserMặc định có thể bị lạm dụng theo cách này nhưng đó không thực sự là mục đích của nó. Ngoài việc là loại xấu xí, nó cũng đặt ra những hạn chế về loại dữ liệu bạn có thể lưu trữ. Mô hình của riêng bạn có thể lưu trữ bất kỳ dữ liệu nào bạn thích, nhưng NSUserDefaults không hoàn toàn linh hoạt như vậy.

Sử dụng SQLite hoặc danh sách thuộc tính hoặc bất kỳ thứ gì để lưu trữ dữ liệu vào tệp thực sự là trực giao đối với câu hỏi về cách quản lý nó. Từ mô tả của bạn, một cách tiếp cận singleton có vẻ hợp lý và singleton đó có thể ghi vào các tệp theo bất kỳ cách nào có ý nghĩa đối với dữ liệu bạn đang làm việc.

+0

Nếu bạn bị cám dỗ để downvote điều này (như ai đó vừa làm), hãy nhìn vào ngày nó được viết. Vào thời điểm đó, hệ điều hành iPhone 2.2 (không phải iOS) là hiện tại và dữ liệu lõi không có sẵn trên iPhone. –

4

Nhiều người lưu trữ mọi thứ trong AppDelegate và truy cập dữ liệu thông qua [[UIApplication sharedApplication] delegate].

Nếu dữ liệu được cho là vẫn tồn tại, bạn cũng có thể sử dụng NSUserDefaults singleton.

Nếu dữ liệu lớn, có thể bạn cần SQLite.

Đây là dữ liệu "toàn cầu" như bạn đã yêu cầu.

Nếu bộ điều khiển chế độ xem của bạn được sắp xếp trong cây, cách tốt hơn sẽ chuyển dữ liệu bắt buộc từ UIViewController mẹ sang con UIViewController.

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