2013-01-18 35 views
9

Câu hỏi này có vẻ như đã được hỏi nhiều lần trước đây, nhưng tôi không chắc tôi đã tổng hợp câu trả lời đúng cách. Vì vậy, ở đây đi.ID đối tượng dữ liệu lõi và ID đối tượng cố định

ObjectID được mô tả bởi Apple (WWDC 2012 Phiên 214) dưới dạng ngữ cảnh an toàn, an toàn chỉ. Vì vậy, tôi đã dành chút thời gian để chuyển đổi mã của mình để tận dụng điều đó. Tuy nhiên, nó không xuất hiện như bối cảnh an toàn khi họ làm cho nó âm thanh, bởi vì như đã thảo luận hereCore Data: Do child contexts ever get permanent objectIDs for newly inserted objects? và ở nơi khác, có sự tồn tại của một cái gì đó gọi là ID thường trực.

Liên quan đến kinh doanh ID vĩnh viễn này, tôi nhìn vào NSManagedObjectContext.h:

/* Converts the object IDs of the specified objects to permanent IDs. This implementation 
will convert the object ID of each managed object in the specified array to a permanent 
ID. Any object in the target array with a permanent ID will be ignored; additionally, 
any managed object in the array not already assigned to a store will be assigned, based on 
the same rules Core Data uses for assignment during a save operation (first writable store 
supporting the entity, and appropriate for the instance and its related items.) Although 
the object will have a permanent ID, it will still respond positively to -isInserted until 
it is saved. If an error is encountered obtaining an identifier, the return value will be 
NO. 
*/ 

- (BOOL)obtainPermanentIDsForObjects:(NSArray *)objects error:(NSError **)error NS_AVAILABLE(10_5, 3_0); 

Vì vậy, tôi đã gặp rắc rối với điều này trong mã của tôi. Tôi có một hệ thống phân cấp của NSManagedObjectContexts (nói, B và C), và chỉ có 1 trong số chúng thực sự được liên kết với một cửa hàng liên tục (gọi là A). Vì vậy, C là con của B, B là con của A. Nếu tôi tạo ra một NSManagedObject từ C, và sau đó gọi obtainPermanentIDsForObjects, nó thực sự là vĩnh viễn? Bởi vì các ý kiến ​​tệp .h đọc giống như nó chỉ tìm kiếm phân cấp thành B (cửa hàng có thể ghi đầu tiên hỗ trợ thực thể và trong thiết lập cha-con, các thay đổi chỉ được đẩy lên 1 mức), chứ không phải A.

Cảm ơn bạn nâng cao.

+0

Tôi nhận được "Dữ liệu cốt lõi không thể thực hiện lỗi" khi nhận id cố định cho các đối tượng trong ngữ cảnh con. Bạn đã bao giờ phát hiện ra nếu điều này không được phép? –

Trả lời

2

Có, nếu bạn gọi obtainPermanentIDsForObjects thì các ID bạn nhận được phải là vĩnh viễn (chặn bất kỳ lỗi triển khai nào trong khung công tác, điều này dường như không có ý nghĩa gì đó vào thời điểm này).

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