Tôi đang tạo đối tượng NSManagedObjectContext
ở cấp đại biểu Ứng dụng và chia sẻ nó trên tất cả các số UIViewController
s của mình. Dưới đây là đoạn code mà tôi sử dụng để truy cập vào nó trong một trong những Xem Bộ xử lý của tôi:CoreData: Xóa các thay đổi từ NSManagedObjectContext
NSManagedObjectContext *managedObjectContext = appDelegate.managedObjectContext;
modelObj = (Model *) [NSEntityDescription insertNewObjectForEntityForName:@"Model" inManagedObjectContext:[appDelegate managedObjectContext]];
Bây giờ trong màn hình này, tôi có một UITableView
với 9 hàng & mỗi tế bào có một UITextField
. Khi người dùng nhập các giá trị vào các trường văn bản, tôi gán chúng vào modelObj
. Bây giờ, người dùng của tôi có một tùy chọn để hủy bỏ và loại bỏ tất cả các thay đổi hoặc lưu chúng vào đĩa. Tôi có mã lưu làm việc tốt. Nhưng trong trường hợp người dùng cố gắng loại bỏ các thay đổi, tôi không chắc chắn phải làm gì. Có vẻ như không phải là phương pháp [managedObjectContext discardChanges]
để ném tất cả chúng đi.
Tôi có thể nghĩ ra một vài cách để giải quyết vấn đề này.
- Tạo phiên bản mới
NSManagedObjectContext
cho mỗi bộ điều khiển thay vì chia sẻ một trên ứng dụng. - Hoặc, tôi có thể tạo một bó số
NSString
s trong mã của tôi và lưu giá trị người dùng vào chúng và gọiinsertNewObjectForEntityForName:
chỉ khi người dùng nhấp vào lưu.
Cách nào là đúng? Hoặc có cách nào để thực hiện NSManagedObjectConext
loại bỏ tất cả các thay đổi đã được thực hiện cho nó không?
Xin cảm ơn,
Teja.
Câu trả lời của Tim Dean là chính xác. Nhưng nó cũng sẽ không phải là một cách tiếp cận sai để tạo ra một bối cảnh con cho màn hình chỉnh sửa này, chèn đối tượng mới của bạn ở đó, và chỉ lưu nó vào bối cảnh gốc nếu người dùng xác nhận. Nếu không, chỉ cần ném đứa trẻ đi, và bạn đã hoàn tất. –