2012-03-14 30 views
6

Tôi đang sử dụng NSFetchedResultsController để điền và quản lý nguồn dữ liệu của bảng.Tôi có cần lưu managedObjectContext cho NSFetchedResultsController nếu tôi thay đổi một số thuộc tính không?

Khi người dùng chọn một hàng nhất định, một actionsheet bật lên và sau đó cho phép người dùng thay đổi một giá trị cho hàng đó:

NSManagedObject *managedObject = [fetchedResultsController objectAtIndexPath:selectedRowIndexPath]; 
[managedObject setValue:status forKey:@"status"]; 

này hoạt động rất tốt và tôi có thể thấy sự thay đổi ngay lập tức trong tableview. Điều này có nghĩa rằng NSFetchedResultsController biết một cái gì đó được thay đổi và do đó tải lại tableviewcell đó. Khi tôi dừng lại và thoát khỏi ứng dụng của tôi (hoàn toàn) sau đó mở lại nó, thay đổi không được lưu.

Tôi nghĩ rằng NSFetchedResultsConroller sẽ quan tâm đến việc lưu thay đổi.

Tôi có cần lưu thủ công bằng mã sau đây sau mỗi lần thay đổi không?

// Save the context. 
NSError *error = nil; 
if (![self.managedObjectContext save:&error]) { 
    NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
    abort(); 
} 

Hoặc có thể gọi mã này trong:

- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject 
     atIndexPath:(NSIndexPath *)indexPath 
    forChangeType:(NSFetchedResultsChangeType)type 
     newIndexPath:(NSIndexPath *)newIndexPath 

Trả lời

6

Bạn là chính xác. Bạn cần phải lưu ngữ cảnh theo cách thủ công vào cửa hàng. NSFetchedResultsController lấy dữ liệu từ ngữ cảnh, nhưng không lưu dữ liệu vào cửa hàng.

+0

Vì vậy, không phải là một ý tưởng tồi để lưu bên trong phương thức ủy quyền 'didChangeObject'? – Pieter

+1

Nếu bạn đã làm điều đó bạn có thể có nguy cơ một vòng lặp. Các phương thức ủy nhiệm NSFetchedResultsController được sử dụng để cập nhật khung nhìn, chứ không phải mô hình. Vì vậy, bất cứ khi nào một cái gì đó được lưu vào bối cảnh, xem được cập nhật cho phù hợp (về cơ bản vì vậy bạn không cần phải tiếp tục tải lại xem bảng). Nếu bạn đã lưu vào ngữ cảnh trong phương thức ủy nhiệm, phương thức ủy nhiệm sau đó sẽ tiếp tục kích hoạt vì nó sẽ nhận thấy một sự thay đổi trong ngữ cảnh. – Gobot

+0

Vậy giải pháp là gì? – fatuhoku

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