2015-04-02 16 views
5

Hãy có ví dụ này:Xóa mô hình khỏi Vương quốc nhưng giữ đối tượng còn sống

Chúng tôi làm việc với một bộ động vật. Giả sử rằng chúng ta không cần tất cả các động vật tồn tại trong cơ sở dữ liệu, và có một logic điều khiển việc thêm và loại bỏ các con vật khỏi cơ sở dữ liệu.

Ví dụ: tôi có đối tượng, một con ngựa, với thuộc tính chuỗi name với "Suey" và tôi thêm cô ấy vào Vương quốc, với addObject:. Vì vậy, bây giờ chúng ta có đối tượng này được lưu vào Realm. Đối tượng này là hợp lệ, và chúng ta có thể làm horse.name, sẽ trả về "Suey".

Điều gì xảy ra tiếp theo là tôi cần xóa Suey khỏi DB. Tôi làm deleteObject:. Nhưng thật đáng buồn, nó không chỉ loại bỏ những thông tin liên tục về con ngựa mà còn làm cho đối tượng của tôi không hợp lệ. Suey về cơ bản đã chết, vì vậy nếu tôi muốn cô ấy quay trở lại DB tôi cần phải tạo ra một con ngựa khác từ mặt đất lên, và chỉ sau đó tôi sẽ có thể có một Suey khác trong DB.

Có cách nào khác để giữ Suey còn sống, vì vậy tôi có linh hoạt hơn trong việc quản lý tiểu bang của mình không?

Tôi hy vọng tôi đã nêu rõ vấn đề, vui lòng cho tôi biết nếu bạn có bất kỳ câu hỏi nào.

Cảm ơn trước!

CẬP NHẬT

ngựa là tham gia vào một-nhiều mối quan hệ, vì vậy nó là tuổi thọ cũng ảnh hưởng đến các thuộc tính trong mô hình liên quan.

+0

Có mối quan hệ một-nhiều không? Có bất kỳ vị trí nào mà bạn sẽ thêm nhiều giờ như 'Suey' rồi 'Duey' không? Nếu không thì thay vì xóa đối tượng, bạn có thể đặt giá trị của tên thành số không. Và trong khi thêm nếu đối tượng ở đó, bạn có thể đặt thuộc tính tên thay vì addObject. – Samir

+0

Có, có mối quan hệ một-nhiều. Tôi sẽ cập nhật câu hỏi, cảm ơn bạn. – Dumoko

Trả lời

1

Đối tượng trong lĩnh vực là truy cập cho đối tượng tương đương trong cơ sở dữ liệu. Nếu vì lý do gì, bạn cần phải "tách" biến đối tượng khỏi biểu diễn trên đĩa của nó, bạn có thể sao chép nó vào bộ nhớ. Một cách dễ dàng để làm điều đó là để tạo ra một đối tượng bỏ vẫn kiên trì mới với các nội dung của tồn một:

// Assuming `Horse` inherits from `RLMObject` and `persistedHorse` is attached to an `RLMRealm`. 
Horse *persistedHorse = ...; 
Horse *inMemoryHorseCopy = [[Horse alloc] initWithObject:persistedHorse]; 
// This will create a new `Horse` object, not tied to an RLMRealm, 
// by copying the contents of `persistedHorse`. 

Bạn có thể sử dụng phương pháp tương tự bất cứ khi nào bạn cần phải sao chép một hiện RLMObject hoặc vào một stand- một mình đối tượng (như trên), hoặc vào một lĩnh vực khác.

+0

Tôi nhận thấy rằng đối tượng Realm không thực hiện giao thức 'NSCoding', vì vậy về cơ bản ý tưởng là triển khai một cái gì đó như phương thức' -copy'. Ok, cảm ơn vì đã chia sẻ ý tưởng, tôi sẽ ghi nhớ rằng đây là cách "tách". Cảm ơn bạn! – Dumoko

1

Theo documentation mọi sửa đổi đối tượng kết quả truy vấn của bạn (trong trường hợp đối tượng của bạn có tên Suey) sửa đổi dữ liệu trên đĩa trực tiếp vì kết quả là dữ liệu thực tế chứ không phải bản sao của dữ liệu đó. Vì vậy, nếu bạn loại bỏ con ngựa, bạn phải tạo một con ngựa mới.

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