2010-05-26 26 views
5

Tôi cố gắng để di chuyển tableview tôi vào ô thứ 2:UITableView không di chuyển đến ô

[self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:1 inSection:0] 
            atScrollPosition:UITableViewScrollPositionNone 
              animated:NO]; 

tôi nhận được lỗi:

*** Terminating app due to uncaught exception 'NSRangeException', reason: '-[UITableView scrollToRowAtIndexPath:atScrollPosition:animated:]: section (1) beyond bounds (0). 

'

tableview của tôi có 30 tế bào đang xuất hiện không có phần nào.

+0

Hiển thị mã của bạn cho 'numberOfSectionsInTableView:' –

Trả lời

3

Nếu bạn không có phần, sau đó bạn có thể thử các nhà xây dựng indexPathWithIndex: lớp:

[self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathWithIndex:1] 
         atScrollPosition:UITableViewScrollPositionNone 
           animated:NO]; 
+0

Cuộc gọi đó không còn được dùng nữa trong phiên bản 4.0. Tôi biết chúng tôi không thể thảo luận về nó, vì vậy mà không phá vỡ NDA - làm thế nào tôi có thể chỉ định một phần nếu tôi không chứa bất kỳ? –

+0

@Sheehan: Tôi không thể thấy cảnh báo không dùng nữa trong XCode, trong tiêu đề hoặc trong tài liệu. Bạn có chắc chắn cuộc gọi không được chấp nhận? –

+1

Rất tiếc, tôi đã sai khi không được dùng nữa. Tôi đã nhận được lỗi này: *** Chấm dứt ứng dụng do ngoại lệ chưa được nắm bắt 'NSInternalInconsistencyException', lý do: 'Đường dẫn chỉ mục không hợp lệ để sử dụng với UITableView. Đường dẫn chỉ mục được chuyển đến chế độ xem bảng phải chứa chính xác hai chỉ mục xác định phần và hàng. Vui lòng sử dụng danh mục trên NSIndexPath trong UITableView.h nếu có thể. ' –

0

tôi khuyên bạn nên tạo ra một phần để lưu trữ các tế bào của bạn trong phần này có thể không có tiêu đề để nó không trực quan phân biệt. và điều này giúp bạn đạt được khả năng không phải chiến đấu chống lại các lộ trình API dự định.

10

Khi tôi nhận được thông báo lỗi tương tự với một bảng một phần, tôi cố định nó bằng cách tạo ra một NSIndexPath với cả hai liên tiếp và phần:

NSIndexPath *ip = [NSIndexPath indexPathForRow:itemCurrentlyPlaying inSection:0]; 

Nó không phải dễ tìm, nhưng các nhà xây dựng thuận tiện có liên quan được ghi chép lại ở đây:

http://developer.apple.com/iphone/library/documentation/UIKit/Reference/NSIndexPath_UIKitAdditions/Reference/Reference.html

2

Giống như pollyp, tôi đã có thể sử dụng indexPathForRow:inSection:. Tôi gọi đó là số viewWillAppear: của tôi.

Có vẻ như thông báo lỗi của bạn đang cho biết rằng thậm chí không có một phần nào. Bạn có thể gọi số scrollToRowAtIndexPath:atScrollPosition:animated: trước khi dữ liệu bảng được tải (ví dụ: viewDidLoad)? Hãy thử gọi lại sau, trong viewWillAppear:.

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