2009-08-13 5 views
6

Tôi đang cố gắng quyết định xem một số trạng thái ứng dụng, cụ thể là mục đã chọn trong danh sách, phải được lưu trữ trong Dữ liệu chính hoặc NSUserDefaults.Khi nào trạng thái ứng dụng thuộc về Dữ liệu chính thay vì NSUserDefaults?

Nói chung tôi tin rằng các tùy chọn và trạng thái ứng dụng sẽ vẫn tồn tại trong NSUserDefaults và dữ liệu cấp mô hình sẽ vẫn tồn tại ở những nơi khác, như trong Dữ liệu cốt lõi. Mô hình của tôi cho đến thời điểm này là:

  • Dữ liệu có nên được lưu trữ không? Nếu người dùng sẽ không hợp lý mong đợi nó sẽ, sau đó ném nó ra (ví dụ, vị trí con trỏ không được lưu trong TextEdit)
  • NSUserDefaults:
    1. Nếu ứng dụng được nhiều tài liệu, thiết lập sẽ áp dụng đối với tất cả các tài liệu
    2. đó là có thể tưởng tượng rằng các dữ liệu sẽ được cấu hình trong tùy chọn
    3. có dữ liệu bên ngoài của mô hình có ý nghĩa để thử nghiệm (trao đổi nhiều giá trị mặc định với cửa hàng một mô hình)
  • mẫu cấp
    1. Các dữ liệu thuộc rõ ràng như một thuộc tính của một đối tượng mô hình cấp
    2. Dữ liệu là đủ lớn mà lưu trữ nó trong NSUserDefaults sẽ gây ra vấn đề hiệu suất
    3. Nó sẽ là khó khăn hoặc tốn thời gian cho người sử dụng tái tạo dữ liệu (họ chắc chắn sẽ xem xét việc mất thông tin "mất dữ liệu" này)

tôi có kế hoạch để lưu trữ các thứ tự sắp xếp của một số đối tượng trong Core Data. Nếu không có thông tin này (tức là thuộc tính "sortIndex" hoặc "order"), mỗi thể hiện thực thể sẽ phải được tăng cường với dữ liệu từ mặc định của người dùng.

Tuy nhiên, trạng thái lưu trữ trong mô hình có vẻ giống như độ dốc trơn. Nếu tôi lưu trữ thứ tự sắp xếp thì nó cũng có vẻ thích hợp để lưu trữ lựa chọn vì chúng đều là trạng thái của danh sách. Dữ liệu lựa chọn cho trường hợp sử dụng của tôi thực sự có thể khá lớn. Cụ thể, các biểu tượng trong một danh sách phụ thuộc vào lựa chọn trong từng danh sách phụ của chúng.

Có ai có đường thẳng mà họ vẽ đối với NSUserDefault và mô hình dữ liệu không?

Trả lời

5

Bạn không đề cập đến việc đây có phải là một ứng dụng dựa trên tài liệu (như nói, TextEdit) hay một ứng dụng dựa trên thư viện (như nói, AddressBook).

Điều đó có thể giúp bạn quyết định nơi thông tin như vậy nên đi: giả sử một ứng dụng dựa trên tài liệu. Giả sử các tài liệu của nó được đặt dưới sự kiểm soát phiên bản (điều này thực sự khả thi khi sử dụng kiểu lưu trữ dữ liệu XML của Dữ liệu cốt lõi). Mở ứng dụng, thay đổi thứ tự sắp xếp của tài liệu. Điều này có làm bẩn tài liệu không? Thay đổi này có đáng để nhận phòng không? Liệu thay đổi có giá trị đối với những người dùng khác của kho lưu trữ này không?

Thông thường, thứ tự sắp xếp không đủ giá trị để đảm bảo lưu trữ dựa trên tài liệu (Tên Tự động lưu của Ala NSTableView trong Trình tạo giao diện). Nhưng ứng dụng của bạn có thể ưu tiên sắp xếp (có vẻ như nó).

Vì vậy, không có quy tắc cứng và nhanh. Nhưng tôi nghĩ ý tưởng của việc có một tài liệu dưới sự kiểm soát phiên bản, có khả năng được chia sẻ với những người khác, cung cấp một khuôn khổ trí tuệ tốt để làm cho trường hợp của bạn cho cả hai bên.

+0

Đây là ứng dụng dành cho iPhone trong trường hợp của tôi thuộc trường hợp dựa trên thư viện. Tôi thích mô hình tinh thần của việc xem xét một ứng dụng đa tài liệu giả định mặc dù, và liệu sự thay đổi sẽ làm cho ứng dụng bị bẩn. Trong trường hợp của tôi, vì việc chọn danh sách phụ sẽ thay đổi chế độ xem của danh sách cao hơn (cụ thể, lựa chọn phụ sẽ thay đổi hình ảnh nào được hiển thị bên cạnh một mục ở chế độ xem cao hơn). Về sắp xếp, tôi có nghĩa là thứ tự sắp xếp được người dùng xác định. Đó là, họ có thể tự ý đặt hàng danh sách (như tạo danh sách phát trong iTunes). – orque

+0

Xây dựng trên "hiện nó bẩn tài liệu" tôi cũng muốn thêm "sẽ thay đổi kết quả dữ liệu trong một bổ sung cho ngăn xếp hoàn tác". Hoàn tác hoạt động cho cả ứng dụng dựa trên tài liệu và thư viện, vì vậy nó có vẻ giống như một heuristic tốt đẹp. – orque

2

Tôi đồng ý với rentzsch, nhưng một cách khác để xem:

Phần lựa chọn của dữ liệu hoặc là siêu dữ liệu? Nếu siêu dữ liệu, đó có phải là siêu dữ liệu về một tài liệu hoặc trạng thái có áp dụng cho bất kỳ tài liệu nào sẽ xảy ra tiếp theo không?

Siêu dữ liệu cụ thể theo tài liệu có thể muốn được lưu trữ dưới dạng thuộc tính mở rộng. Ví dụ, TextMate lưu trữ các lựa chọn cho một tài liệu theo cách này, giống như BBEdit, MPW, và những người khác được sử dụng để lưu trữ các thiết lập tab, kích thước cửa sổ, vv như là một nguồn tài nguyên trong ngã ba tài nguyên. Siêu dữ liệu được coi là tùy chọn và tài liệu vẫn còn nguyên vẹn nếu nó bị tước đi.

Nếu lựa chọn là một phần không thể tách rời của dữ liệu, thì tất cả có nghĩa là lưu trữ nó trong dữ liệu, sử dụng Dữ liệu cốt lõi nếu bạn tình cờ xoay theo cách đó.

Và nếu nó không phải là một ứng dụng dựa trên tài liệu, sau đó NSUserDefaults là con đường đơn giản nhất kể từ hỗ trợ cho nó thường được xây dựng vào lớp con NSView chung qua các ràng buộc.

+0

Tôi đồng ý. Tôi quên nêu rõ mô hình hiện tại của mình là gì, vì vậy tôi đã cố định câu hỏi của mình (Tôi tin rằng đó là "điều đúng" để làm tại đây) Tôi đã gặp khó khăn trong việc quyết định xem thông tin có phải là một phần không tách rời của dữ liệu hay không ". Với mô hình của Rentzsch (tôi sẽ hiển thị dấu chấm bẩn) điều này trở nên dễ dàng hơn, – orque

2

Cá nhân tôi không có đường lối cứng giữa lưu tùy chọn trong chính tệp hoặc trong NSUSerDefaults.

Nhưng tôi đã luôn luôn có xu hướng hướng tới rõ ràng:

  • sở thích Application = NSUSerDefaults
  • sở thích Document = trong file tự

Đối với nhà nước lựa chọn đặc biệt, tôi sẽ đánh giá nếu giữ mà đủ quan trọng đối với người dùng. Nếu có, và đủ quan trọng để di chuyển với tài liệu sang một máy tính khác, tôi sẽ giữ nó trong chính tài liệu đó.

Nếu nó không quan trọng (hoặc có thể áp dụng), tôi sẽ không bận tâm với việc lưu nó.

+0

Tôi nghĩ rằng điều này đã vấp ngã tôi vì trên iPhone tôi không nhất thiết phải xem xét bất kỳ ứng dụng nào có "tài liệu"; tất cả chỉ là dữ liệu. Trạng thái tiết kiệm trở nên quan trọng hơn nhiều vì việc chuyển đổi các ứng dụng có nghĩa là thoát và khởi chạy lại. – orque

+0

Tôi nghĩ ngay cả trong một ứng dụng iPhone - nếu trạng thái phần trong vị trí người dùng hiện tại là quan trọng đối với dữ liệu, tôi sẽ lưu nó, nếu không, tôi sẽ không bận tâm. Nghe có vẻ như vậy, nên tôi sẽ lưu nó với dữ liệu. – Lucien