2011-10-11 20 views
5

Tôi đang tạo một ứng dụng tạo lịch trình khóa học cho những người ở trường của tôi. Đây là thiết kế thô tôi đã lưu ý cho ứng dụng:Có phải NSDocument và CoreData là một kết hợp có thể không, hoặc là NSPersistentDocument là cách duy nhất?

Tôi muốn lớp con NSDocument của tôi đại diện cho thời gian biểu của từng cá nhân. Ý tưởng là họ mở một tài liệu và có thể thêm các khóa học từ một hồ bơi vào lịch trình của họ, sau đó lưu, chia sẻ, mở, v.v. Vì vậy, lịch trình sẽ được lưu trữ trong một tệp bên ngoài, do người dùng chọn.

Tôi muốn sử dụng CoreData để lưu trữ tất cả các khóa học mà sinh viên có thể chọn. Những thay đổi này sẽ không bị thay đổi khi tạo và chỉnh sửa thời gian biểu, nhưng thay vào đó, có thể chỉ khi khởi chạy ứng dụng, khi nó kiểm tra cập nhật thông tin khóa học.

Đây có vẻ là cách hợp lý để cấu trúc ứng dụng của tôi. Vấn đề là, khi tôi tạo một ứng dụng dựa trên NSDocument và kiểm tra hộp use CoreData, thay vì biến nó thành một ứng dụng dựa trên NSDocument với các cơ sở CoreData, nó làm cho nó trở thành một ứng dụng dựa trên NSPersistentDocument.

Tôi không nghĩ đây là hành vi tôi muốn. Có cách nào để sử dụng CoreData, nhưng vẫn có một ứng dụng dựa trên NSDocument? Hoặc là NSPersistentDocument những gì tôi nên sử dụng sau khi tất cả? Tôi có hiểu lầm về toàn bộ hoạt động kinh doanh của NS * không? Bạn có lời khuyên nào cho cấu trúc của ứng dụng của tôi không?

Cảm ơn bạn đã trợ giúp!

+0

YOu nói rằng bạn muốn sử dụng Dữ liệu cốt lõi để lưu trữ tất cả các khóa học mà sinh viên có thể chọn. Bạn cũng sẽ sử dụng Dữ liệu cốt lõi để lưu trữ thời khóa biểu của từng cá nhân trong lớp NSDocument của bạn? Tôi nghĩ rằng đó là câu hỏi thứ hai xác định có hay không sử dụng NSPersistentDocument. – paulmelnikow

+0

@noa: Không, tôi dự định lưu trữ thời gian biểu của học sinh trong một tệp bên ngoài, do người dùng chọn. –

+0

Sử dụng một cái gì đó như một plist hoặc một archiver keyed, tôi đoán bạn có nghĩa là gì? Bạn có thể cho phép người dùng chọn một tệp riêng và vẫn sử dụng Dữ liệu cốt lõi. Đó là những gì NSPersistentDocument giúp bạn làm. – paulmelnikow

Trả lời

2

Có, bạn có thể sử dụng Dữ liệu cốt lõi mà không cần sử dụng NSPersistentDocument. Chỉ cần thực hiện trực tiếp NSPersistentStoreCoordinatorNSManagedObjectContext trực tiếp. Dưới đây là một số mã: how do you create a NSManagedObjectContext

Nếu bạn muốn chia sẻ một thể hiện của danh mục trong số nhiều trường hợp NSDocument và không muốn giữ danh mục cùng với từng tài liệu, đây là một cách hay. Ứng dụng hoặc ứng cử viên của bạn có thể chăm sóc tải danh mục khóa học, và tài liệu của bạn có thể chăm sóc tải và tiết kiệm thời khóa biểu của từng cá nhân. Bạn sẽ phải tự mình thực hiện, bằng cách sử dụng một trình lưu trữ có khóa, nói, hoặc bằng cách viết một plist mình.

Thay vào đó, nếu muốn, bạn có thể tận dụng thêm dữ liệu cốt lõi. Trình bày lịch sinh viên với NSManagedObject s và để NSPersistentDocument xử lý việc tải và lưu các ngữ cảnh. Bạn nhận được rất nhiều chức năng hữu ích, chẳng hạn như hoàn tác - làm lại, miễn phí.

+0

Ahh, cảm ơn bạn đã mở rộng! Tôi không nghĩ rằng tôi đã bao gồm đủ lời giải thích trong câu hỏi ban đầu của mình. Cảm ơn! –

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