2011-05-08 92 views
0

我是一名初學者,但一直在努力構建這個應用程序。從另一個問題工作,我問:mapkit and table view sample code - iPhone SDK在tableView中使用mapView註釋

我能夠放在一起(半)功能的tableview和mapview。但是,我不確定如何調用mapview註釋來執行numberOfRowsInSection或cellForRowAtIndexPath。

cellForRowAtIndexPath我確定沒有正確調用,但我想它是一個combo的numberOfRowsInSection和cellForRowAtIndexPath ..但老實說,我一直在嘗試(和失敗)3周,閱讀我所能我問了這個問題。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 

//return [[mapView annotations] count]; 

return 1; } 

所以我試圖使用mapview註釋的計數,但我甚至不知道這是否工作。

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ static NSString *CellIdentifier = @"Cell"; 

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

if (cell == nil) 
{ 
    cell =[[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier]autorelease]; 
} 

NSMutableArray *annotations = [[NSMutableArray alloc] init]; 
     //i'm sure the entire block below is pretty awful but i'm at a standstill 

    for (MapLocation *annotation in [mapView annotations]) 
    { 
     [annotations addObject:annotation]; 

     cell.textLabel.text = [[annotations objectAtIndex:indexPath.row]title]; 

    } 
return cell; //i'm pretty sure this shouldn't be here 

}

如果需要任何其他代碼,以幫助解釋我的情況只是讓我知道。

+0

tableView和mapView是否在同一個視圖控制器中?如果您在numberOfRowsInSection中取消註釋該行,會發生什麼情況?它究竟如何失敗?是否有編譯錯誤,運行時錯誤? – Anna 2011-05-08 02:51:57

+0

只能得到1個註釋才能進入tableview,而不會在啓動時崩潰。我花了幾天時間,但我已經解決了這個問題,但numberOfRowsInSection仍然不是很有活力,但我可以忍受它。我會在下面發佈我的解決方案。 – jamesC 2011-05-11 17:46:23

回答

0
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 

//return [[mapView annotations] count]; 

return 20;} 

所以我知道我一次只有20個註釋。這仍然不理想,但它的工作原理

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ static NSString *CellIdentifier = @"Cell"; 

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

if (cell == nil) 
{ 
cell =[[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitlereuseIdentifier:CellIdentifier]autorelease];} 

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

if (cell == nil) 
{ 
    cell =[[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier]autorelease]; 
} 

NSMutableArray *annotations = [[NSMutableArray alloc] init]; 

if(indexPath.row < [[mapView annotations] count]) 
    { 

    for (MapLocation *annotation in [mapView annotations]) 
    { 
     [annotations addObject:annotation]; 

    } 
    cell.textLabel.text = [[annotations objectAtIndex:indexPath.row]title]; 

    } 
    return cell;} 

tableview中填充了註釋信息。我通過觀看Serban Porumbescu的UCDavis課程(他正在討論桌面視圖和對象),找到了我的解決方案。

+0

但是,如果您取消註釋numberOfRowsInSection中的那一行,會發生什麼錯誤?您在cellForRowAtIndexPath中的循環是不必要的,且效率低下。每當該行變爲可見時,該方法將由表視圖調用一次。可以用'cell.textLabel.text = [[[mapView annotations] objectAtIndex:indexPath.row] title];''也可以有內存泄漏(需要做'[註釋發佈];''return cell;'之前')。 – Anna 2011-05-11 18:16:59

+0

當我替換你的代碼時,我得到錯誤: 「***由於未捕獲的異常'NSRangeException',原因:'*** - [NSMutableArray objectAtIndex:]:索引0超出空數組的界限''終止應用程序 * **一次調用堆棧:「 – jamesC 2011-05-12 13:51:35

+0

您是否還更改了numberOfRowsInSection以返回實際計數而不是」20「? – Anna 2011-05-12 14:01:14