My RootViewController chứa chế độ xem bảng đơn giản. Khi chọn một trong các mục trong bảng, một DetailViewController được hiển thị với nhiều chi tiết hơn về mục được chọn. Dữ liệu của đối tượng dữ liệu có liên quan được tải và duy trì thông qua CoreData. Làm thế nào để vượt qua trên FetchedResultsController và ManagedObjectContext đến DetailViewController trong phương thức didSelectRowAtIndexPath:? Tôi có cần định nghĩa các thuộc tính cho cả hai trong DetailViewController.h không? Bạn có thể cung cấp cho tôi một mẫu mã không?Sử dụng FetchedResultsController và ManagedObjectContext trong nhiều bộ điều khiển chế độ xem
Trả lời
Thứ nhất, mỗi trường hợp bộ điều khiển kết quả được tìm nạp (FRC) được cấu hình cụ thể cho mỗi tableview để bạn không chuyển FRC từ bộ điều khiển tableview sang bộ điều khiển tableview. Thay vào đó, mỗi bộ điều khiển tableview instantiates và cấu hình một FRC mới đặc biệt cho tableview của nó.
Trong thiết kế chính-chi tiết trong đó chế độ xem bảng là chế độ xem chính, bạn không chuyển FRC sang chế độ xem chi tiết mà thay vào đó chỉ là đối tượng được quản lý duy nhất được biểu thị bằng hàng xem bảng đã chọn.
Apple khuyến cáo rằng ngữ cảnh đối tượng được quản lý (MOC) được chuyển bởi "tiêm phụ thuộc". Điều này rất đơn giản. Trong thiết kế phổ biến nhất, bạn khởi tạo MOC trong ủy nhiệm ứng dụng, sau đó cung cấp cho mỗi bộ điều khiển xem của bạn với thuộc tính managedObjectContext
. Sau đó, khi bạn tải/đẩy một bộ điều khiển xem, bạn chỉ cần đặt thuộc tính managedObjectContext
cho MOC.
Ví dụ, trong thiết kế Master-Detail, bạn thường có bộ điều khiển điều hướng (NAV). Để xem cách hoạt động của tính năng này, hãy tạo ứng dụng thử nghiệm bằng mẫu ứng dụng dựa trên điều hướng trong Xcode. Đánh dấu để sử dụng Dữ liệu cốt lõi. Bạn sẽ có cả đại biểu ứng dụng và số RootViewController
có thuộc tính managedObjectContext
.
Bây giờ trong phương pháp ứng dụng đại biểu của applicationDidFinishLaunching:...
thêm mã để làm cho nó trông giống như:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
// Add the navigation controller's view to the window and display.
RootViewController *topVC=(RootViewController *) self.navigationController.topViewController;
topVC.managedObjectContext=self.managedObjectContext;
self.window.rootViewController = self.navigationController;
[self.window makeKeyAndVisible];
return YES;
}
... sau đó trong RootViewController.m
add:
- (void)viewDidAppear:(BOOL)animated
{
NSLog(@"self.managedObjectContext = %@",self.managedObjectContext);
[super viewDidAppear:animated];
}
Khi bạn chạy các ứng dụng thử nghiệm các RootViewController
đối tượng sẽ ghi nhật ký là managedObjectContext
thuộc tính nào đó như:
2011-07-19 09:24:05.193 CDNavTemplate[3203:207] self.managedObjectContext = <NSManagedObjectContext: 0x4d318a0>
... chứng minh rằng đối tượng RootViewController
có ngữ cảnh đối tượng được quản lý từ đại biểu ứng dụng.
Bây giờ, bạn chỉ cần lặp lại quy trình cho mỗi bộ điều khiển chế độ xem mà bạn đẩy lên ngăn điều khiển điều hướng dần xử lý đối tượng bối cảnh đối tượng được quản lý giống nhau xuống phân cấp chế độ xem. Bạn có thể truyền bất kỳ loại đối tượng nào khác theo cùng một cách chính xác.
Apple khuyến cáo tiêm phụ thuộc vì nó làm cho mã thêm mô đun và giúp dễ sử dụng nhiều bối cảnh đối tượng được quản lý trong một ứng dụng duy nhất. Bạn chỉ cần vượt qua từng bộ điều khiển xem cụ thể mà bối cảnh cụ thể mà nó cần tại bất kỳ thời điểm cụ thể nào.
Nói tóm lại, có hai tùy chọn:
- Cả hai (FetchedResultsController và ManagedObjectContext) cần phải được ở một vị trí nơi mà tất cả các bộ điều khiển xem có thể truy cập chúng. Ví dụ, nếu chúng nằm trong App Delegate (nơi Xcode đặt ManagedObjectContext theo mặc định), bạn có thể truy cập nó theo cách này (điều này sẽ hiển thị một cảnh báo - vì vậy bạn sẽ cần phải nhập delegate vào lớp ứng dụng của ứng dụng) :
NSManagedObjectContext *context = [[[UIApplication sharedApplication] delegate] managedObjectContext];
- bạn thực sự có thể vượt qua những giá trị vào bộ điều khiển tầm nhìn của bạn khi bạn tạo chúng. Ví dụ, bạn có thể tạo một lớp con (chẳng hạn như DataViewController hoặc một cái gì đó) và có hai thuộc tính trên lớp con này (cho ManagedObjectContext và FetchedResultsController) sẽ được thiết lập khi bạn tạo chúng.
Bạn không nên chuyển bộ điều khiển kết quả đã tìm nạp từ bộ điều khiển xem để xem bộ điều khiển vì FRC dành riêng cho mỗi lần xem bảng. Mỗi tableview nên có FRC riêng của nó. – TechZen
- 1. Truyền một ManagedObjectContext sang chế độ xem thứ hai
- 2. Sử dụng nhiều bộ điều khiển trong một chế độ xem trong Rails
- 3. Nhiều người trong nhiều chế độ xem và bộ điều khiển asp.net mvc
- 4. Sử dụng nhiều tệp nib với một bộ điều khiển chế độ xem đơn?
- 5. Cách bật từ một bộ điều khiển chế độ xem sang một bộ điều khiển chế độ xem khác
- 6. Thêm chế độ xem của trình điều khiển chế độ xem con vào chế độ xem phụ của bộ điều khiển chế độ xem cha mẹ
- 7. (UIView *) hitTest trong bộ điều khiển chế độ xem?
- 8. Bộ điều khiển xem đẩy vào chế độ xem giao diện chế độ xem
- 9. Thay đổi kích thước bộ điều khiển chế độ xem chính và chi tiết trong bộ điều khiển chế độ xem chia tách?
- 10. Một bộ điều khiển hiển thị bằng cách sử dụng các chế độ xem của bộ điều khiển khác
- 11. MVC - tôi có cần sử dụng Bộ điều khiển trong Chế độ xem không?
- 12. Hiển thị chế độ xem của bộ điều khiển khác
- 13. ExtJS 4 cách tạo và hiển thị bộ điều khiển/chế độ xem mới từ bộ điều khiển/chế độ xem khác?
- 14. Đi từ Bộ điều khiển đến Chế độ xem
- 15. Chế độ xem trang phân trang với bộ điều khiển chế độ xem trẻ em
- 16. Loại bỏ hai bộ điều khiển chế độ xem
- 17. Bộ điều khiển và Chế độ xem bên trong Thư viện Lớp
- 18. Sự cố khi đẩy nhiều bộ điều khiển chế độ xem vào ngăn điều khiển điều hướng
- 19. Tại sao sử dụng biến mẫu để "kết nối" bộ điều khiển với chế độ xem?
- 20. Sử dụng ngăn chứa bộ điều khiển chế độ xem, trẻ em mất cha mẹ
- 21. Làm thế nào để sử dụng UISplitViewController làm Bộ điều khiển Chế độ xem?
- 22. Sự khác nhau giữa Chế độ xem và Trình điều khiển chế độ xem là gì?
- 23. Bộ điều khiển Chế độ xem đơn với nhiều ngòi bút?
- 24. Truyền dữ liệu từ bộ điều khiển chế độ xem này sang bộ điều khiển chế độ xem khác; iOS <= 4 so với iOS 5
- 25. lớp uipageviewcontroller bị lỗi khi cài đặt nhiều bộ điều khiển chế độ xem
- 26. Bộ điều khiển chế độ xem sẽ không bắt đầu ở chế độ ngang
- 27. Nhiều bộ điều khiển chế độ xem trên màn hình cùng một lúc?
- 28. Có một bộ điều khiển xem khác trước khi bộ điều khiển chế độ xem hiện tại xuất hiện
- 29. Làm cách nào trong bộ điều khiển thanh tab để tôi phân biệt giữa bộ điều khiển chế độ xem với bộ điều khiển chế độ xem khác và giữ lại thanh tab?
- 30. "Thêm bộ điều khiển"/"Thêm chế độ xem" trong ứng dụng ASP.NET MVC/WebForms ASP.NET
Đây là thông tin rất có giá trị đối với tôi, tôi đang tìm kiếm một lời giải thích như vậy trong tất cả các cuốn sách và trong tài liệu, nhưng không thể tìm thấy nó. Cảm ơn một bó - bạn đã làm cho ngày của tôi! – Otto64
Những người viết tài liệu và sách đều hiểu rõ về API nên thật khó để họ hiểu được điều gì làm người dùng bối rối. Đó là vấn đề lớn trong lĩnh vực đào tạo. Tôi phải đối phó với nó mọi lúc. – TechZen
Ngọt ngào, giải thích tuyệt vời Sir. – nmdias