2013-01-08 23 views
10

tôi đã tìm thấy gì về migration rules trong trường hợp thay đổi deletion rule của một managedObjects relationshipCoreData di cư - xóa các quy tắc của các mối quan hệ

mô hình CoreData ban đầu của tôi chứa một thực thể có một mối quan hệ. Quy tắc xóa của mối quan hệ này là cascade. Tôi phải thay đổi hành vi này thành Nullify.

Vì vậy, tôi đã tạo một new version of my coredata model nhưng không có bất kỳ di chuyển nhẹ nào và nó vẫn hoạt động. Vì vậy, tôi bị thương nếu tôi nên thực hiện thêm phiên bản mới của mô hình của mình hoặc nếu việc thay đổi quy tắc xóa (ví dụ: từ cascade đến nullify) không ảnh hưởng/cần bất kỳ di chuyển nào.

Mọi đề xuất?

+0

Không có di chuyển nhẹ? Vì vậy, bạn không sử dụng 'NSMigratePersistentStoresAutomaticallyOption' hoặc' NSInferMappingModelAutomaticallyOption' khi thêm cửa hàng liên tục? –

+0

Không Tôi đang sử dụng sau đây để tạo ra cửa hàng của tôi: addPersistentStoreWithType phối: NSSQLiteStoreType cấu hình: nil URL: storeURL tùy chọn: nil lỗi: & lỗi] – Alexander

Trả lời

16

Quy tắc xóa xác định hành vi của dữ liệu lõi khi chạy: Nếu một đối tượng bị xóa, các mối quan hệ khác có thể được đặt thành NULL hoặc các đối tượng liên quan cũng có thể bị xóa.

Vì vậy, tôi giả định rằng các quy tắc xóa chỉ được lưu trữ trong mô hình Dữ liệu cốt lõi, nhưng không được lưu trữ trong tệp lưu trữ liên tục.

Để xác minh điều này, tôi đã tạo 2 tệp lưu trữ từ 2 mô hình Dữ liệu cốt lõi với các thực thể giống nhau, nhưng các quy tắc xóa khác nhau. NSStoreModelVersionHashes trong các cửa hàng liên tục metadata từ điển giống hệt nhau.

Thực tế, cả hai tệp SQLite đều giống với ngoại lệ duy nhất của "Z_UUID" trong bảng "Z_METADATA", là NSStoreUUID của tệp lưu trữ liên tục.

Ngoài ra, addPersistentStoreWithType:... sẽ không thành công nếu phiên bản băm của cửa hàng được tải khác với các băm trong mô hình.

Do đó, việc thay đổi quy tắc xóa sẽ không phải là vấn đề.

+0

Đó chính xác là những gì tôi đã trải qua - băm giống hệt nhau. Tôi chỉ bị thương, bởi vì trong tài liệu táo tôi thấy rằng các deleteRules nên có liên quan mặc dù: [...] Đối với mỗi thuộc tính trong mỗi thực thể, các thuộc tính sau phải bằng nhau: name, isOptional, isTransient, isReadOnly, cho các thuộc tính attributeType, và cho các mối quan hệ destinationEntity, minCount, maxCount, deleteRule, và inverseRelationship [...]! Vì vậy, bạn sẽ không tạo ra một phiên bản mới cho sự thay đổi? Tôi không thấy bất kỳ lợi thế của một cái mới ... – Alexander

+0

@ Alexander: Tôi phải thừa nhận rằng tôi đã không tra cứu tài liệu (bạn có thể cho tôi vị trí không?), Tôi vừa thử nghiệm nó như mô tả. Và bạn đã thử nghiệm 'addPersistentStoreWithType:' công trình, vì vậy tôi không thấy vấn đề gì. –

+0

Ở đây bạn đi (Trang 8 ở dưới cùng): https://developer.apple.com/library/mac/documentation//Cocoa/Conceptual/CoreDataVersioning/CoreDataVersioning.pdf – Alexander

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