2009-06-15 29 views
7

Tôi đang làm việc trên ứng dụng chứa dữ liệu của nó trong máy chủ MySQL bên ngoài, nhưng lưu trữ cục bộ bằng cách sử dụng Dữ liệu cốt lõi để có thời gian phản hồi tốt hơn. Về cơ bản, những gì tôi muốn làm là thế này:Cập nhật kết quả của NSFetchedResultsController mà không cần tìm nạp mới

  1. Fetch dữ liệu từ Core Data (SQLite lưu trữ dữ liệu, sử dụng NSFetchedResultsController) và hiển thị nó
  2. Grab mặt hàng mới từ máy chủ MySQL trong nền
  3. Làm mới chế độ xem bảng hiện tại bằng tập dữ liệu mới (cả mục mới và cũ)

Tôi có tất cả điều này làm việc ngoại trừ bước cuối cùng. Tôi không thể tìm ra cách làm cho NSFetchedResultsController cập nhật bộ dữ liệu của nó. Cho đến nay, tôi đã cố gắng thêm các mục trực tiếp đến NSManagedObjectContext của nó:

[NSEntityDescription insertNewObjectForEntityForName:@"Entity" 
           inManagedObjectContext:[fetchedResultsController 
                 managedObjectContext]];

Tôi cũng đã thử những gì Apple đã làm trong ví dụ CoreDataBooks của họ, và sử dụng một "thêm" bối cảnh đối tượng được quản lý riêng biệt và một cuộc gọi đến mergeChangesFromContextDidSaveNotification:. Dường như không thay đổi tập hợp các NSManagedObject * s trong ngữ cảnh đối tượng được quản lý của trình điều khiển kết quả tìm nạp của tôi.

Tôi làm cách nào để cập nhật bộ đối tượng mà NSFetchedResultsController hiện đang quản lý?

Trả lời

4

Tôi phát hiện ra vấn đề của mình không phải là các đối tượng không cập nhật, nhưng trường hợp NSFetchedResultsController mà tôi đã không cập nhật tiêu đề chỉ mục của nó đúng cách, và do đó tôi không thể thấy kết quả trong UITableView của mình.

Cập nhật ngữ cảnh đối tượng được quản lý từ bộ điều khiển kết quả được tìm nạp làm cập nhật bộ đối tượng kết quả của bộ điều khiển.

7

chỉ có vấn đề của bạn và có sử dụng thông báo là cách duy nhất bạn có thể thực hiện làm mới tableview khi bảng sử dụng bộ điều khiển nsfetchedresults.

như trong mẫu databooks lõi:
bước 1: thêm một người quan sát đến NSNotificationCenter cho NSManagedObjectContextDidSaveNotification thông báo
bước 2: lưu ngữ cảnh của bạn (thông báo kích hoạt để chọn của bạn)
step3: trong phương pháp chọn của bạn: hợp nhất các thay đổi trong ngữ cảnh bằng cách sử dụng phương pháp mergeChangesFromContextDidSaveNotification
step4: xóa người quan sát khỏi trung tâm thông báo.

Cá nhân tôi muốn bỏ qua certer thông báo và chỉ nói với bối cảnh làm mới bản thân chết tiệt :)

+0

Đây thực sự là phương pháp tôi đã sử dụng, và tôi nghĩ rằng đây là cách Apple đã làm nó trong một số họ Ví dụ về Dữ liệu cốt lõi. – Tim

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