Tôi mong đợi (hy vọng thậm chí) rằng đây sẽ là một câu hỏi ngu ngốc, nhưng sau khi đấu vật trong nhiều giờ với vấn đề này tôi cần một số thông tin chi tiết.Sao chép thực thể khi thay đổi được thực hiện bởi một đứa trẻ ManagedObjectContext được đẩy (đã lưu) cho phụ huynh của nó
Ứng dụng iOS 5.1 của tôi sử dụng MOC lồng nhau, có MOC ChildCueueConcurrency con, gọi là MOC-Child, có cha mẹ là MOC chính thống kê, gọi là MOC-Parent. MOC-Parent sẽ quay lại chế độ xem bảng hiển thị các thực thể của nó. MOC-Child được sử dụng bởi một trình phân tích cú pháp chạy không đồng bộ trên một chuỗi không chính, để tạo các thực thể mới tương ứng với các mô tả-thực thể XML được phân tích cú pháp từ một kết nối URL và sau đó đẩy các thực thể mới vào MOC- Phụ huynh, thông qua một lưu trên MOC-Child, hiển thị chúng trong một cái nhìn bảng. Đây hoạt động tuyệt vời:
1) Parser creates entity in MOC-Child
2) Parser saves MOC-Child
3) New entity is added to MOC-Parent
4) New entity is displayed in MOC-Parent's table view
Tuy nhiên, mô tả của bất kỳ tổ chức đưa ra trong thức ăn này có thể thay đổi theo thời gian, do đó thực thể mô tả nó cần phải được sửa đổi trong ứng dụng và di động trong chế độ xem bảng cập nhật. Vì vậy, đối với mỗi mô tả thực thể trong nguồn cấp dữ liệu, trình phân tích cố gắng tìm nạp thực thể (nếu có) trong MOC-Child có cùng id với thực thể được mô tả và nếu có so sánh giá trị của thực thể hiện tại với các giá trị mô tả xem có gì thay đổi không. Khi trình phân tích cú pháp phát hiện theo cách này một thực thể đã được sửa đổi, nó cập nhật các giá trị của thực thể hiện có trong MOC-Child với các giá trị mới trong mô tả, và sau đó lưu MOC-Child để đẩy các thay đổi lên MOC-Parent.
Đây là nơi mọi thứ xảy ra sai. Tôi đã nghĩ rằng những thay đổi được thực hiện cho một thực thể được tìm nạp trong MOC-Child sẽ, khi được đẩy tới cha mẹ bằng cách lưu nó, chỉ đơn giản là "xuất hiện" trong thực thể "tương tự" trong MOC-Parent. Tuy nhiên, những gì tôi thấy xảy ra là thực thể thay đổi từ MOC-Child đang được thêm vào MOC-Parent, như thể đó là một thực thể hoàn toàn riêng biệt và mới; với kết quả là MOC-phụ huynh, và do đó các bảng xem nó ổ đĩa, kết thúc với hai đơn vị cho mỗi thực thể chỉnh sửa:
1) Parser modifies existing entity in MOC-Child
2) Parser saves MOC-Child
3) Modified entity is _added to_ MOC-Parent
4) Entity is displayed _twice_ in MOC-Parent's table view
gì cho? Tôi cần phải làm gì để thay đổi các giá trị của một thực thể hiện tại trong MOC-Parent, nếu tôi không thể thực hiện nó trong MOC-Child? Và nếu tôi có thể làm như vậy trong MOC-Child, tôi cần phải làm gì hơn ngoài việc lưu MOC-Child để thực hiện các thay đổi trong MOC-Parent mà không cần thêm thực thể lần thứ hai?
Cảm ơn trước vì bất kỳ trợ giúp hoặc thông tin chi tiết nào bạn có thể cung cấp!
Carl
P.S. Một vài làm rõ. Khi tôi nói rằng thực thể thay đổi được thêm vào MOC-Parent, tôi có nghĩa là NSFetchedResultsController đang theo dõi các vấn đề MOC-Parent kiểu thay đổi NSFetchedResultsChangeInsert (không kiểu thay đổi NSFetchedResultsChangeUpdate) cho thực thể đã thay đổi, mặc dù " cùng "thực thể đã có mặt trong MOC-Parent.
Ngoài ra, khi tôi nói "cùng một thực thể", tôi có nghĩa là một thực thể trong MOC-cha mẹ có cùng một mô tả id cung cấp (trong trường hợp này là NSString) là thực thể được thay đổi trong MOC-con (không phải nhất thiết phải cùng một objectID, trên thực tế dường như có một objectId khác nhau).
Tôi gặp vấn đề tương tự. Tôi có một NSFetchedResultsController gắn liền với các ngữ cảnh lồng nhau từ một UIManagedDocument. Tôi chỉ tải từ một máy chủ trên phụ huynh trong nền và sau đó hiển thị từ các con ở phía trước. Nhưng nó không hoạt động bình thường cho dù thế nào đi chăng nữa. Nếu tôi đóng ứng dụng và mở lại, nó tải hoàn toàn từ bộ nhớ tho. Odd. –