2010-08-26 35 views
6

Tôi đang cố gắng viết một hệ thống yêu thích cho ứng dụng của mình. Tôi đã chuyển đổi mô hình của mình thành một đối tượng được quản lý. Vì vậy, hãy tưởng tượng người dùng được trình bày một màn hình với một danh sách các đối tượng như vậy. Họ có thể chọn để lưu một số mục yêu thích của họ, điều này sẽ tiếp tục tồn tại trong dữ liệu cốt lõi.Dữ liệu cốt lõi: Tạo nhiều đối tượng được quản lý, nhưng chỉ lưu một số đối tượng?

Vấn đề là, khi tôi tạo tất cả các đối tượng mô hình này, tôi làm như vậy với bối cảnh đối tượng được quản lý. Nếu người dùng lưu một đĩa đơn vào mục yêu thích của họ, nó sẽ lưu toàn bộ ngữ cảnh và duy trì mọi thực thể đơn lẻ. Các tính năng bổ sung sẽ không có trong mục yêu thích của chúng, vì việc thêm vào mục yêu thích sẽ tạo một thực thể "yêu thích" được lưu và trỏ tới đối tượng mà những người khác sẽ không có. Nhưng tất cả các vật thể khác sẽ được cứu một cách không cần thiết.

Cách tiêu chuẩn trong cách này/tiêu chuẩn để thiết kế hệ thống yêu thích trên iPhone là gì? Tôi có nên tách mô hình của mình thành hai lớp, mô hình mà tôi hiển thị cho người dùng không, và sau đó một mô hình lưu vào db? Bằng cách đó tôi có thể xây dựng mô hình của mình mà không cần đưa chúng vào MOC. Nhưng đó sẽ là một lớp trùng lặp với tất cả các trường giống nhau.

Trả lời

6

Không thực sự là một cách tiêu chuẩn để làm điều này vì dữ liệu cốt lõi mong muốn bạn lưu các đối tượng bạn tạo. Tuy nhiên, nếu bạn tạo các đối tượng với:

id object = [[NSManagedObject alloc] initWithEntityDescription:entity inManagedObjectContext:nil]; 

Chúng sẽ không có ngữ cảnh để lưu lại. Sau đó cho những người bạn cần phải lưu bạn có thể:

[[self managedObjectContext] insertObject:object]; 

sau đó gọi -save: vào bối cảnh và chỉ có những người đã có bộ bối cảnh của họ sẽ tiết kiệm được.

+0

Và điều này có an toàn không? Tôi thấy rằng phương pháp tiện lợi để xây dựng các NSMO thay thế một đoạn mã khá lớn. – Tesserex

+0

Có an toàn không, phương pháp tiện lợi nào? Phương pháp tôi mô tả giống như gọi '[NSEntityDescription insert ...]'. Sự khác biệt duy nhất là phương thức 'NSEntityDescription' trả về một đối tượng autoreleased. –

+1

Ok, bạn chỉ có điều thứ hai của bạn lạc hậu. Cuộc gọi chính xác là '[[self managedObjectContext] addObject: object]', trò chuyện mà bạn có ở đó không tồn tại. – Tesserex

0

Sẽ không dễ dàng hơn khi có thuộc tính isFavorite trên các đối tượng được quản lý của bạn. Sau đó, trong chế độ xem ưa thích của bạn, bạn có thể lọc dựa trên điều đó?

+3

Nhưng điều đó vẫn không nhận được thực tế là tôi đang lưu toàn bộ dữ liệu mà tôi không cần. – Tesserex

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