Ứng dụng của tôi sử dụng Dữ liệu cốt lõi (với một số trợ giúp của Bản ghi Magical) và khá nhiều luồng đa luồng sử dụng NSOperation
.Dữ liệu cốt lõi - hiện tạiObjectWithID: lỗi: gây ra lỗi 133000
Tất nhiên tôi rất cẩn thận khi chỉ vượt qua khoảng NSManagedObjectID
giữa các chủ đề/hoạt động.
Bây giờ, để lại cho các đối tượng được quản lý tương ứng trong phẫu thuật, tôi sử dụng -existingObjectWithID:error:
như sau:
Collection *owner = (Collection *)[localContext existingObjectWithID:self.containerId error:&error];
Nhưng những gì tôi nhận được lại là con số không và error
nói đây là một lỗi # 13300: NSManagedObjectReferentialIntegrityError
.
Dưới đây là những gì các tài liệu nói về lỗi này:
NSManagedObjectReferentialIntegrityError
Error code to denote an attempt to fire a fault pointing to an object that does not exist.
The store is accessible, but the object corresponding to the fault cannot be found.
nào không đúng trong trường hợp của tôi: đối tượng mà tồn tại. Thật vậy, nếu tôi lặp qua tất cả các trường hợp của thực thể Collection
đó với một số NSFetchRequest
, tôi tìm thấy nó trong số đó và NSManagedObjectID
của nó chính xác là số tôi đã chuyển đến -existingObjectWithID:error:
.
Hơn nữa, nếu tôi sử dụng -objectWithID:
thay vào đó, tôi nhận được một đối tượng chính xác trở lại tốt.
Vì vậy, có điều tôi đang thiếu. Dưới đây là một vài quan sát/câu hỏi bổ sung:
- "đối tượng không tồn tại": ý nghĩa của "tồn tại" trong câu đó là gì? "tồn tại" ở đâu? Nó chắc chắn "tồn tại" trong kho dữ liệu cốt lõi của tôi tại thời điểm đó.
- "đối tượng tương ứng với lỗi không thể tìm thấy": ý nghĩa của từ "tìm thấy" trong câu đó là gì? "tìm thấy" ở đâu? Nó chắc chắn "được tìm thấy" trong kho dữ liệu cốt lõi của tôi tại thời điểm đó.
Vì vậy, có thể tôi thiếu điều gì đó liên quan đến những gì existingObjectWithID:error:
làm gì? Tài liệu hướng dẫn cho biết:
If there is a managed object with the given ID already registered in the context, that object is returned directly; otherwise the corresponding object is faulted into the context.
[...]
Unlike objectWithID:, this method never returns a fault.
Điều này không giúp được vấn đề của tôi. Tôi không quan tâm đến việc đối tượng của mình hoàn toàn bị lỗi, và không phải là lỗi. Trong thực tế, bất kỳ lỗi nào bên trong nó sẽ kích hoạt trên dòng mã tiếp theo khi tôi truy cập các thuộc tính của đối tượng.
- Kịch bản thực tế dẫn đến
NSManagedObjectReferentialIntegrityError
là gì?
Cảm ơn mọi giác ngộ.
Bạn đã bao giờ tìm ra điều này chưa? Tôi nhận được cùng một vấn đề và đối tượng của tôi chắc chắn là có và hoạt động tiết kiệm đang chạy, nhưng nó chỉ xảy ra rải rác. – Adam