2011-02-08 26 views
5

Tôi có NSMutableArray với dữ liệu (mã hóa cứng).Làm cách nào để sử dụng NSMutableArray làm Nguồn dữ liệu cho UITableView

tôi thực hiện hai phương pháp TableView và IB, tôi đã thiết lập các đại biểu và nguồn dữ liệu

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return [myArray count]; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"UITableViewCell"]; 

    if (!cell) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"UITableViewCell"] autorelease]; 
    } 

    cell.textLabel.text = [myArray objectAtIndex:[indexPath row]]; 
    NSLog(@"Cell is %@", [myArray objectAtIndex:indexPath.row]); 
    return cell; 
} 

Các dữ liệu sẽ không xuất hiện trong TableView. Tôi đã chạy NSLog và tôi có thể thấy dữ liệu nằm trong myArray.

Tôi đã thêm NSLog vào mã và dường như mã không bao giờ thực hiện. Câu hỏi đặt ra là mảng của tôi được tạo ra như thế nào?

Dưới đây là đoạn code

- (id)init:(NSMutableArray *)theArray 
{ 
    [super init]; 
    countryTable.delegate = self; 
    countryTable.dataSource = self; 

    UITapGestureRecognizer * tapRecognizer = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(viewTapped:)] autorelease]; 
    [window addGestureRecognizer:tapRecognizer]; 

    myArray = [[NSMutableArray alloc] init]; 
    myArray = theArray; 
    return self; 
} 
+0

cách bạn tạo 'NSMutableArray'? – WrightsCS

Trả lời

5

mã cơ bản của bạn là đúng, chỉ cần có một mảng (mà bạn đã không được cung cấp ở đây), vì vậy đây sẽ là một ví dụ:

NSMutableArray *myArray = [NSMutableArray arrayWithObjects:@"One",@"Two",@"Three",nil]; 

Và bạn có thể NSLog này: NSLog(@"Count: %i, Array: %@",[myArray count], myArray);

Output: Trong đó phải trả lại như cell.textLabel.textmỗi ví dụ của bạn

Count: 3, Array: ( "One", "Hai", "Ba" )

Bạn cũng nên đảm bảo rằng bạn đặt các giao thức UITableViewDelegateUITableViewDataSource trong tiêu đề của mình.

0

Hãy thử điều này -

cell.textLabel.text = [[myArray objectAtIndex:indexPath.row] retain]; 
+1

UILabel.text là thuộc tính bản sao, phần giữ lại bổ sung sẽ chỉ rò rỉ NSString đó. –

+0

Tôi đã cố gắng giữ lại và cùng một vấn đề. Tôi sẽ đăng mã được cập nhật ở trên –

1

Tôi không biết nếu câu hỏi vẫn còn mở nhưng tôi cho nó một thử.

Khi tôi đọc mã của bạn, tôi không thể thấy nơi countryTable được khởi tạo vì vậy tôi cho rằng nó được kết nối trong InterfaceBuilder? Và nếu trường hợp này xảy ra, countryTable chỉ hợp lệ sau khi viewDidLoad. Nhưng bạn cũng có thể thiết lập delegate và DataSource trong InterfaceBuilder.

Nhân tiện, mỗi khi bạn thay đổi nguồn dữ liệu (myArray), hãy gọi countryTable.reloadData.

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