Như Barry Wark đã nói, hãy nhớ rằng Dữ liệu cốt lõi không phải là một orm. Chi tiết SQL tinh khiết không được tiếp xúc với người dùng và mọi hàng chỉ là một đối tượng. Nhân tiện, đôi khi bạn cần truy cập "khóa chính", ví dụ khi bạn cần đồng bộ hóa db coredata với cơ sở dữ liệu sql bên ngoài (trong trường hợp của tôi, tôi cần nó trong hàm gọi lại để thay đổi trạng thái của một đối tượng sau khi INSERT với thành công trong db từ xa). Trong trường hợp này, bạn có thể sử dụng:
objectId=[[[myCoredataObject objectID] URIRepresentation] absoluteString]
rằng sẽ trả về một chuỗi như: x-CoreData: // 76BA122F-0BF5-4D9D-AE3F-BD321271B004/Object/p521 đó là id duy nhất được sử dụng bởi CoreData để xác định đối tượng đó.
Nếu bạn muốn để có được trở lại một đối tượng với id duy nhất:
NSManagedObject *managedObject= [managedObjectContext objectWithID:[persistentStoreCoordinator managedObjectIDForURIRepresentation:[NSURL URLWithString:objectId]]];
NB: Hãy nhớ rằng nếu người nhận chưa được lưu trong bối cảnh CoreData, đối tượng ID là một giá trị tạm thời mà sẽ thay đổi khi đối tượng được lưu.
Tôi ước tôi có thể cung cấp cho bạn một điểm cộng nữa cho 'Dữ liệu cốt lõi không phải là cơ sở dữ liệu'. – Abizern
Có những trường hợp sử dụng phổ biến nơi bạn cần lấy một đối tượng bằng dữ liệu truyền id của nó từ một lựa chọn ô xem bảng tới bộ điều khiển xem chi tiết. Bạn chỉ có thể vượt qua đối tượng chính nó, nhưng thường bạn không muốn làm điều đó nếu bạn đang sử dụng một bối cảnh khác nhau trong chi tiết VC. – memmons
@Michael: Chính xác. Thực hành tốt nhất để làm điều này là gì? – Noah