2008-10-08 29 views
40

Phương thức lớp để tạo ra một con đường chỉ với một hoặc nhiều nút là:Làm thế nào để tạo ra "chỉ số" cần thiết cho NSIndexPath: indexPathWithIndexes: chiều dài:

+ (id)indexPathWithIndexes:(NSUInteger *)indexes length:(NSUInteger)length 

Làm thế nào để chúng ta tạo ra các "chỉ số" cần thiết trong tham số đầu tiên?

Tài liệu được liệt kê là Mảng chỉ mục để tạo thành đường dẫn chỉ mục nhưng đang mong đợi (NSUinteger *).

Để tạo đường dẫn chỉ mục là 1.2.3.4, nó có đơn giản là một mảng [1,2,3,4] không?

Trả lời

59

Bạn là chính xác. Bạn có thể sử dụng nó như thế này:

NSUInteger indexArr[] = {1,2,3,4}; 

NSIndexPath *indexPath = [NSIndexPath indexPathWithIndexes:indexArr length:4]; 
+0

xin lỗi vì câu hỏi mới: tôi có cần [indexSet release] sau khi sử dụng không? – Steve

+4

@Steve Không phải trong trường hợp này. Bạn sẽ tìm thấy câu trả lời cho tất cả các vấn đề quản lý bộ nhớ liên quan đến Cocoa trong Hướng dẫn lập trình quản lý bộ nhớ cho Cocoa (http://developer.apple.com/mac/library/documentation/cocoa/Conceptual/MemoryMgmt/MemoryMgmt.html) . Bởi vì 'indexPathWithIndexes: length' không có 'new', 'copy' hoặc 'alloc' trong bộ chọn, các quy tắc Cocoa xác định rằng nó trả về một cá thể được tự động phát hành. –

7

Giả định của bạn là chính xác. Nó đơn giản như một mảng C của NSUInteger. Tham số chiều dài là số phần tử trong mảng chỉ mục.

Mảng trong C thường được xác định là con trỏ (trong trường hợp này là NSUInteger *) với tham số chiều dài hoặc một trình kết thúc đã biết như \ 0 cho chuỗi C (chỉ là mảng char).

44

Trên iOS, bạn cũng có thể sử dụng phương pháp này từ NSIndexPath UIKit Additions (khai báo trong UITableView.h):

+ (NSIndexPath*) indexPathForRow:(NSUInteger)row inSection:(NSUInteger)section 
+0

Aha! Tài liệu (của các loại) cho "API không có giấy tờ" về điều tôi đã hỏi trong câu hỏi khác Q. Cảm ơn! :) – Olie

+2

nó rất tốt tài liệu: http://developer.apple.com/iphone/library/documentation/uikit/reference/NSIndexPath_UIKitAdditions/Reference/Reference.html, tuy nhiên nó chỉ có sẵn trên iphone (UIKit). – Intentss

+0

Phương thức này được khai báo trong NSIndexPath, không phải là UITableView. – Matjan

3

Tôi đã làm điều này trong 2 dòng mã

NSMutableArray *indexPaths = [[NSMutableArray alloc] init]; 
for (int i = firstIndexYouWant; i < totalIndexPathsYouWant; i++) [indexPaths addObject:[NSIndexPath indexPathForRow:i inSection:0]]; 

Ngắn gọn, sạch sẽ và dễ đọc. Mã miễn phí, đừng gõ nó.

+0

tôi sẽ chia các dòng thứ 2 thành nhiều , làm đau mắt của tôi –

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