2014-09-15 14 views
6

Ứng dụng của tôi sử dụng CoreDataTableViewController của khóa học Stanford, là lớp con của UITableViewController.Lớp con UITableViewController thực hiện giao thức UIDataSourceModelAssociation nhưng các phương thức của nó không bao giờ được gọi là

Đối với các chế độ xem cụ thể của ứng dụng, tôi tạo các lớp con của CoreDataTableViewController để quản lý một chế độ xem cụ thể.

Tôi vừa mới kết nối mã hóa và khôi phục trạng thái trong hầu hết ứng dụng của mình và tất cả đều có vẻ hoạt động tốt. Điều duy nhất tôi để lại trễ là triển khai giao thức UIDataSourceModelAssociation để bảo vệ các hàng có thể nhìn thấy và được chọn của UITableViews (tôi cũng hy vọng nó có thể duy trì trạng thái chỉnh sửa của khung nhìn bảng và một hàng cụ thể nếu tôi đã chọn nó xóa, nhưng chưa xác nhận).

Tôi đã triển khai UIDataSourceModelAssociation trong CoreDataTableViewController với hy vọng rằng nó sẽ hoạt động cho tất cả các khung nhìn của tôi, nhưng khi gỡ lỗi nó, tính năng này không hoạt động và thêm các điểm ngắt mà tôi thấy không phải hai phương thức UIDataSourceModelAssociation. đặt ứng dụng của tôi vào nền với nút trang chủ hoặc khôi phục ứng dụng đó bằng cách chạy lại trong XCode.

CoreDataTableViewController và các lớp con của nó thực hiện một số phương thức nguồn dữ liệu để hiển thị các hàng trong chế độ xem bảng của tôi. Tôi đã tìm kiếm xung quanh và thấy rằng UITableViewController tự động thêm chính nó làm dataSource cho tableView.

Tôi đã thêm sự tỉnh táo khẳng định trong các lớp con của tôi viewDidLoad chức năng của hình thức

assert(self.tableView); 
assert(self.tableView.dataSource == self); <--- fails here 

Những thất bại về kiểm tra các nguồn dữ liệu là chính chúng ta. Tôi có thể thấy bằng cách đăng nhập và sử dụng trình gỡ rối rằng dataSource là không nil tại thời điểm này. Tôi đoán tôi chỉ tự hỏi liệu khi chúng ta phân lớp một lớp thì mỗi lớp có cùng giá trị tự hay không bởi vì UITableViewController của tôi đã thiết lập chính nó thành dataSource, nhưng vào thời điểm tôi đã phân lớp nó hai lần xuống trường hợp xem cụ thể của tôi, bản thân nó hơi khác với UITableViewController gốc. Hoặc là cái gì đó khác chặn dữ liệu và chuyển tiếp theo yêu cầu. Như một sửa chữa tôi nên xem xét hardcoding lớp con của riêng tôi để tự, hoặc có CoreDataTableViewController thêm chính nó như là dataSource rõ ràng như đây là nơi mà các phương pháp UIDataSourceModelAssociation được thực hiện.

Để tham chiếu phân cấp chế độ xem của tôi bao gồm các khung nhìn được phân lớp UITableViewController của tôi sống bên trong NavigationControllers mà tôi đã nghe có thể gây ra sự cố.

Chỉ cần một chút rõ ràng về cách phân lớp sẽ hoạt động đối với các con trỏ trên các lớp và tự hỏi liệu có ai có thể hiểu tại sao các phương thức giao thức của tôi không được gọi là sẽ thực sự được đánh giá cao.

Chúc mừng

Trả lời

1

Tôi vẫn không chắc tại sao nguồn dữ liệu của tableViewController không trực tiếp đặt thành tự. Nhưng rõ ràng các phương thức dataSource của tôi được gọi là các hàm tableView của tôi. Rõ ràng một số loại đối tượng đang chuyển tiếp trên các phương thức dataSource đến lớp thực tế của tôi cho tôi ...

Cuối cùng, các phương thức giao thức UIDataSourceModelAssociation được gọi đơn giản như đảm bảo cả UITableViewController và UITableView bên trong nó đã phục hồi id .. với chỉ UITableViewController bên ngoài có một id phục hồi, không có phương thức nào được gọi.

Đáng buồn là bây giờ tôi bị lừa bởi các phương thức này được gọi trước khi tài liệu UIManagedDocument của tôi tải xong vì vậy tôi không thể thực sự làm bất cứ điều gì hữu ích trong đó. Đó là một vấn đề khác mặc dù.

+0

Cảm ơn bạn đã nhập, tôi cũng đã gặp "hành vi" này. Đảm bảo rằng lớp con UITableViewController có thuộc tính 'dataSource' của nó được đặt rõ ràng thành self (hoặc bất kỳ) làm cho các phương thức UIDataSourceModelAssociation được gọi. –

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