2012-02-08 1 views
9

Tôi đang chèn một thực thể Thư mục mới vào ngữ cảnh đối tượng mô hình của tôi (MOC), đó là một con của MOC chính. Trước khi lưu, [[newFolder objectID] isTemporaryId] trả về YES. Khi tôi lưu đầu tiên MOC của tôi và sau đó là MOC chủ và yêu cầu [[newFolder objectID] isTemporaryId], nó lại nói CÓ. Tôi hy vọng nó bây giờ là một đối tượng tồn tại, và thực sự, nếu tôi thẩm vấn tệp SQLite, nó chứa thư mục mới. Đối với toàn bộ thời gian của ứng dụng đang chạy của tôi, nó sẽ nói CÓ. Không phải trước khi tôi bỏ thuốc lá và khởi động lại, do đó tải các đối tượng lên từ các cửa hàng, hiện nó nói KHÔNG.Khi nào một đối tượng nhận được một objectID không phải là tạm thời?

Tôi luôn nghĩ rằng một NSManagedObject đã thay đổi từ một đối tượng tạm thời thành một đối tượng được lưu trữ mà không còn là một đối tượng tạm thờiID khi nó được lưu. Khi nào một đối tượng nhận được một objectID không phải là tạm thời?

Cheers

Nik

+1

Tôi có lẽ nên thêm rằng tôi không thể sử dụng "NSManagedObject * obj = [MOC existingObjectWithID: lỗi oid: & error];" trong đó oid là ObjectID (vẫn còn tạm thời) của thư mục mới được chèn và lưu – niklassaers

+0

Cho đến nay, cách hữu ích duy nhất trong số này là theo dõi một đĩa lưu trữ với [self.masterMOC reset]; – niklassaers

Trả lời

13

Đối tượng trong bối cảnh con không bị thay đổi bởi những thay đổi trong bối cảnh cha mẹ cho đến các đối tượng được làm mới. Có lẽ làm mới các đối tượng sau khi lưu bối cảnh cha mẹ sẽ làm các trick.

Nếu cách đó không hiệu quả, luôn có -[NSManagedObjectContext obtainPermanentIDsForObjects:error:].

+2

Đó là đứa trẻ được thay đổi, không phải là cha mẹ. Sau đó, đứa trẻ được lưu đầu tiên, sau đó là cha mẹ. Cảm ơn bạn đã lừa với obtainPermanentIDsForObjects. Nhưng tôi vẫn muốn biết lý do tại sao ID đối tượng không làm mới. – niklassaers

+0

Tôi hiểu — bạn thay đổi đối tượng, lưu ngữ cảnh con, sau đó lưu ngữ cảnh gốc. Khi bạn lưu ngữ cảnh con, nó sẽ không nhận được ID cố định; Tôi đang giả thuyết rằng khi bạn lưu ngữ cảnh gốc, điều đó chỉ ảnh hưởng đến bối cảnh gốc, do đó ngữ cảnh con không nhìn thấy ID cố định. Nếu đúng, làm mới đối tượng sẽ buộc bối cảnh con để có được ID mới từ cha mẹ. –

+3

Bạn sẽ đề xuất cách nào để làm mới đối tượng? Khi sử dụng ID tạm thời cho objectID, existingObjectWithID: error: trả về một lỗi và objectWithID: cung cấp cùng một đối tượng với cùng một ID tạm thời. Ngay cả sau khi cả hai con và cha mẹ được lưu. đặt lại MOC mẹ giải quyết vấn đề này, nhưng đó là một giải pháp rất tốn kém. – niklassaers