4

我正在制作一个使用UITableViewand的应用程序UITableViewController。但是,当我调用[self.tableView reloadData];UITableViewController,没有任何反应, (tableView: cellForRowAtIndexPath:不调用)。我应该怎么办?

- (void) UserChangedAmmountAndCurrency: (NSNotification*) notification {
    self.localBank.activeAmmount=((NSNumber*)[notification.userInfo objectForKey:@"newAmmount"]).doubleValue;
    self.localBank.activeCurrency=[self.localBank.worldBank requestCurrencyForLocalBank:((NSString*)[notification.userInfo objectForKey:@"newISO4217Currency"])];
    [self.tableView reloadData];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

    NSNumber *ammount= [self.localBank ammountForElementAtIndex:indexPath.row];
    VIPCurrency* currency=[self.localBank currencyForElementAtIndex:indexPath.row];


    static NSString *CellIdentifier = @"cellWithCurrencyAndAmmount";
    VIPConversionCell* cell=[self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    cell.longCurencyIdentifier.text=currency.longName;
    cell.shortCurrencyIdentifier.text=currency.shortName;
    cell.textfieldForAmmount.text=ammount.stringValue;
    return cell;
}

编辑:我做了一些额外的测试。我测试过tableview数据源和delegate是我用来调用reload方法的viewcontroller,没问题。我还注意到其他一些奇怪的事情。调用 reloadData 时,既不调用numberOfSectionsInTableView:也不numberOfRowsInSection:调用。我觉得在调用 reloadData 之前我没有做一件基本的事情,但我不知道是什么。难道是我必须以某种方式专门将单元格设置为过时的?

编辑:我还检查了该方法是否在主线程中被调用,这也可以

4

3 回答 3

0

检查nilfrom dequeReusableCellWithIdentifiercall 的想法是创建一个新单元格并将其返回。除非您之前使用给定标识符创建了一个单元格并且在可重用池中,否则该方法将返回nil. 因此,正如@Verec 所提到的,您应该自己检查nil并创建单元格,并且return.

于 2013-03-29T22:10:12.817 回答
0

.xib在文件和.h文件中设置表视图委托(UITableViewDataSource, UITableViewDelegate)

[myTableView reloadData];

于 2013-03-30T11:47:21.737 回答
-2

你只需要添加

UITableViewDataSource,UITableViewDelegate

在.h

例子

@interface yourviewcontroller : UIViewController <UITableViewDataSource,UITableViewDelegate>
于 2013-03-30T11:41:45.113 回答