2012-02-24 11 views
5

Ứng dụng của tôi sử dụng dữ liệu vị trí và trình bày cả dưới dạng bảng và trong bản đồ.Làm thế nào để chia sẻ một UIManagedDocument bằng cách sử dụng Storyboards với một Tab Bar Controller như điều khiển ban đầu?

Bắt đầu bằng Trình điều khiển thanh tab, mỗi chế độ xem của nó là Trình điều khiển điều hướng (một cho chế độ xem bảng, một cho bản đồ, v.v ...).

Tôi muốn chia sẻ một UIManagedObject để sử dụng cùng một bối cảnh đối tượng được quản lý vì vậy nếu người dùng cập nhật ở dạng xem bảng, dữ liệu cũng được cập nhật cho bản đồ, do đó không cần cập nhật hai lần.

Ban đầu tôi nghĩ về việc phân lớp điều khiển thanh tab và thêm một tài liệu UIManagedDocument làm thuộc tính, và chỉ chuyển nó cho mỗi bộ điều khiển để chuẩn bị cho phương thức segue. Nhưng tôi đọc rằng UITabBarController không có nghĩa là được phân lớp.

Một cách tiếp cận khác có thể là tạo Bộ điều khiển chế độ xem, thêm Tài liệu được quản lý dưới dạng thuộc tính và Thanh tab vào đó. Nhưng tôi nghĩ rằng bảng phân cảnh của tôi sẽ không rõ ràng hoặc không nhất quán bằng cách hiển thị một số mối quan hệ đồ họa và những người khác chỉ trong mã.

Điều nào phù hợp? Hoặc có cách nào tốt hơn để làm điều đó?

Cảm ơn bạn trước và lời chúc mừng tốt đẹp nhất.

Trả lời

3
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
if ([[segue identifier] isEqualToString:@"showGuide"]) 
    { 
     UITabBarController *tabBarController = (UITabBarController *)[segue destinationViewController]; 
     for (id vc in tabBarController.viewControllers) {  
      [vc setValue:_document forKey:@"document"];    
    } 
} 
+0

Tôi có nên làm điều đó trong App Đại biểu? – Armando

+0

Không, điều này nên được viết trong ViewController, đứng trước TabBarController. Những gì tôi đã sử dụng ở đây được gọi là Mẫu thiết kế mã hóa giá trị khóa. Sử dụng nó, tôi đã gán thuộc tính "tài liệu" của mỗi bộ điều khiển của TabBarController cho self.document. – Shmidt

+0

Hướng dẫn tốt để sử dụng UIManagedDocument: http://www.informit.com/articles/article.aspx?p=1842295&seqNum=10 – Shmidt

2

Tôi cũng gặp phải sự cố này và tôi đã giải quyết trên lớp trình xử lý tài liệu riêng biệt cung cấp quyền truy cập vào tài liệu được tải qua khối.

[[MYDocumentHandler sharedDocumentHandler] performWithDocument:^(UIManagedDocument *document) { 
    // Do stuff with the document, set up a fetched results controller, whatever. 
}]; 

Tôi đã viết lên giải pháp của tôi và gửi mã ở đây: Core Data with a Single Shared UIManagedDocument