簡體   English   中英

從方法調用時,reloadData不執行任何操作

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM