2012-06-23 31 views
6

Tôi không thể kết nối nguồn dữ liệu và ủy quyền các cửa hàng của chế độ xem bảng trong bảng phân cảnh cho lớp được ủy nhiệm tùy chỉnh của tôi. Tôi muốn ủy nhiệm các hàm bảng đó cho một lớp khác. Có một cái gì đó tôi đã hiểu lầm về phái đoàn, cửa hàng và những thứ dây dẫn trong một bảng phân cảnh.Nguồn dữ liệu UITableView và đại biểu sẽ không kết nối với lớp tùy chỉnh

nền

Tôi có một UIViewController rằng có một cái nhìn chứa một UIPickerView và giữa những thứ khác, một UITableView.
Tôi đã đạt đến điểm số UIViewController của tôi quá lớn và tôi muốn di chuyển các hàm liên quan đến bảng vào một lớp khác.

Tôi đã tạo lớp sau để chứa các phương pháp bảng như numberOfSectionsInTableView:.

@interface ExerciseTableDelegate : NSObject <UITableViewDelegate, UITableViewDataSource> 

@property (strong, nonatomic) ExerciseDataController *dataController; 

@end 

Tôi đã suy nghĩ để đặt một tham chiếu đến lớp trên trong tôi UIViewController

@interface ExerciseViewController : UIViewController <UIPickerViewDataSource, UIPickerViewDelegate> 
{ 
    UIPickerView *exercisePicker; 
} 

@property (strong, nonatomic) IBOutlet ExerciseTableDelegate *tableDelegate; 

@end 

Tôi đã hy vọng rằng trong kịch bản, khi tôi kéo một trong những nguồn dữ liệu hoặc đại biểu các cửa hàng của bảng của tôi xem trên UITableViewController nó sẽ cho tôi khả năng kết nối với lớp được ủy nhiệm của tôi. Nó không.

Sau đó tôi đã cố gắng tạo một đối tượng trong bảng phân cảnh, cho nó lớp ExerciseTableDelegate. Sau đó tôi có thể kéo bảng xem đại biểu đến đối tượng, nhưng đây không phải là đối tượng tương tự mà tôi thiết lập trong AppDelegate của tôi.

ứng dụng đại biểu của tôi

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    UINavigationController *navigationController = (UINavigationController *)self.window.rootViewController; 
    ExerciseViewController *rootViewController = (ExerciseViewController *)[[navigationController viewControllers] objectAtIndex:0]; 

    ExerciseTableDelegate *tableDelegate = [[ExerciseTableDelegate alloc]init]; 
    ExerciseDataController *dataController = [[ExerciseDataController alloc] init]; 

    tableDelegate.dataController = dataController; 
    rootViewController.tableDelegate = tableDelegate; 

    // Override point for customization after application launch. 
    return YES; 
} 
  • Tôi có cần phải làm cho đối tượng của tôi một singleton và vẫn khởi nó trong các đại biểu?
  • Tôi có cần phải thực hiện thiết lập này trong mã thay vì trong Bảng phân cảnh không?
  • Tạo đối tượng trong bảng phân cảnh có ý tưởng sai không?

Tôi cảm thấy mình thân thiết nhưng tôi nghĩ mình đang làm quá nhiều.

Trả lời

1

Nếu bạn muốn truy cập vào phiên bản ExerciseTableDelegate mà bạn đã thiết lập trong ủy nhiệm ứng dụng, bạn sẽ phải kết nối nó với chế độ xem bảng trong mã, vì nó sẽ không truy cập được từ bảng phân cảnh - như bạn ' đã tìm thấy, việc thêm đối tượng mới vào bảng phân cảnh sẽ tạo một phiên bản mới.

May mắn thay, điều này khá đơn giản để triển khai. Trong phương pháp viewDidLoad của bộ điều khiển xem bảng của bạn, thêm những điều sau đây:

self.tableView.delegate = self.tableDelegate; 
self.tableView.datasource = self.tableDelegate; 

này sẽ tái điểm nguồn dữ liệu và đại biểu đến đối tượng riêng biệt của bạn.

+0

Thankyou @jrturton. Điều đó đã làm các trick. Thêm vào đó, tôi cần làm điều chuẩn để tạo ra một IBOutlet cho bảngViewViewViewView và cần thiết để kết nối nó trong bảng phân cảnh. – AllTheThingsICanDo

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