![](/img/trans.png)
[英]_tableView reloadData not working when i called method from another class
[英]reloadData doesn't do anything when called from a method
更新:該問題已得到解決。 我將函數類中的所有內容直接放入myView類中。 不完全知道為什么,但是確實如此。 也許你們中的一些人可能會對此進行推測。 我歡迎您的幫助。
------
在開始目標編程之前,我認為自己至少是一名高級程序員。...我剛剛開始編寫應用程序編碼,到目前為止一切正常。 但是現在我有點泡菜了。 看,我有一個UITableView,其數據應該定期更新。 我的應用程序從網絡服務器獲取數據並將其存儲到數組中。 到目前為止,一切都很好-所有這些都可以根據NSLog輸出進行。 當我將[myTable updateData]
放入按鈕操作時,UiTableView [myTable updateData]
更新。 但是當它被另一種方法調用時,它什么也沒做...
到目前為止,我的代碼(縮寫為):myView.h:
@interface myView : UIViewController <UITableViewDataSource, UITableViewDelegate> {
@public
IBOutlet UITableView *myTable;
}
- (void)reloadMyTable;
- (IBAction)testbtn:(id)sender;
@end
myView.m:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection: (NSInteger)section
{
Model *model=[Model getInstance];
return [model.ARrecentnews count];
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return numberOfSections;
}
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection: (NSInteger)section
{
return @"Some Headline";
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cellID"];
Model *model=[Model getInstance];
cell.textLabel.text = [model.ARrecentnews objectAtIndex:([model.ARrecentnews count]-indexPath.row-1)]; //Populating Table in reverse order
return cell;
}
- (IBAction)testbtn:(id)sender {
[myTable reloadData];
}
- (void)reloadMyTable {
[myTable reloadData];
}
確保您正在從主線程調用UI代碼:
- (void)reloadMyTable {
dispatch_async(dispatch_get_main_queue(), ^{
[myTable reloadData];
});
}
(我強烈懷疑從Web服務器獲取數據的代碼在后台線程中運行;如果不是,則應該運行)...
請首先檢查是否已在xib中為TableView賦予了Outlet。 我的意思是您是否已將myTable連接到xib文件中已獲取的tableview。 在.h文件中替換
UITableView *myTable;
與
IBOutlet UITableView *myTable;
並提供參考。
並將以下行添加到cellFor RowAtIndexPath中:
if(cell==nil)
{
cell=[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cellID"];
}
希望這會幫助你。
在cellForRowAtIndexPath:和[mytable reloadData];處放置一個斷點; 被調用,請檢查它是否觸發了tbaleview的del方法。 我懷疑它正在重新加載數據,但是沒有要顯示的新數據? 您是否檢查過數據源?
另外,更改后的.h文件現在是什么樣子? 在IB中,您是否已將tableview的數據源/代理鏈接到視圖?
在此類中,我從服務器執行數據收集,一旦數據存儲在數組中,它將通過以下
myView *view = [[myView alloc]init]; [view reloadMyTable]
調用reloadMyTable:myView *view = [[myView alloc]init]; [view reloadMyTable]
myView *view = [[myView alloc]init]; [view reloadMyTable]
;
從您的評論看來,您好像創建了viewController的新實例,然后在該實例上調用方法。 這不會對顯示的tableView起作用。
您必須找出一種獲取對現有myView
實例的引用的方法。 如何執行取決於您在代碼中執行的操作,並且不知道這一點就很難分辨。
您可以將@property添加到您的Function類中,以保存viewController。 或者,您添加一個調用reloadData的完成塊。 您可能也可以使用NSNotifications。 有很多方法可以告訴顯示的ViewController它應該重新加載其tableView。
PS:Objective-C中的類應以大寫字母開頭,即您的類應稱為MyView。 而且由於該類是UIViewController的子類,而不是UIView的子類,因此我將其稱為MyViewController
。 清晰度很重要,我不希望將UIViewController子類稱為MyView。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.