簡體   English   中英

如何確保我的 UITableView 數據更新 function 在再次顯示應用程序(從后台啟動或啟動)時僅調用一次?

[英]How can I ensure my UITableView data update function is called only once when app is displayed again (from background start, or launch)?

如何確保我的表格數據 function 在再次顯示應用程序(從后台啟動或啟動)時僅被調用一次?

也就是說,我希望在用戶單擊應用程序圖標時刷新我的表數據,並且只刷新一次。 所以要求是:a)controller 中的更新方法僅在用戶單擊應用程序圖標后調用一次 b)無論用戶是否(i)第一次啟動應用程序,(ii)從后台返回都有效, (iii) 用戶請求應用程序的任何其他方式回到前台。

我目前在實現中遇到的問題是,在應用程序從后台返回的情況下,數據更新被調用了兩次,所以我基本上想對此進行改進。 我目前正在做的有缺陷的方式是:

- (void)updateEventData {
    // UPDATE CODE HERE
}
- (void)becomeActive:(NSNotification *)notification {
    [self updateEventData];
    [self.tableView reloadData];
}

- (void)viewDidLoad {
    [super viewDidLoad];  
    [self updateEventData];

    // Auto Refresh Data - Handle Case where App becomes active from background & you want to refresh data
    [[NSNotificationCenter defaultCenter] addObserver:self 
                                             selector:@selector(becomeActive:)
                                                 name:UIApplicationDidBecomeActiveNotification
                                               object:nil];

}

您可以通過以下方式實現它:

1) 在 NSUserDefault 中取一個變量。 2) 首次啟動應用程序時將其值設置為 FALSE。 3) 在各個視圖 controller 中獲取 NSUserDefault 變量的值。 如果它的值是 FALSE 則調用更新方法。 4) 現在,當應用程序變為活動狀態時,將變量值設置為 TRUE。 5) 在各自的視圖 controller 中獲取它的值。 如果其值為 TRUE,則不要調用 update 方法。 6) 所以,update 方法只會被調用一次。

希望對您有所幫助。 可能會有一些細微的變化。

如果有任何困難,請告訴我。

好吧,我從您的問題中了解到,您只想在啟動應用程序時通過單擊 iPhone 上的應用程序圖標來更新表數據。首先了解應用程序的執行,首先調用主 function,然后在您的應用程序中調用代表

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

    // Override point for customization after application launch.
    [self postNotification];
    [self.window makeKeyAndVisible];

    return YES;
}

您可以在此方法中發布通知,因為它被調用一次。 而且,如果您想在 ViewDidLoad 方法中以自己的方式執行此操作,那么我認為您還必須刪除通知的觀察者,我認為這可能是它被調用兩次的原因,因為您沒有刪除通知。

作為寫這個問題和審查答案的一部分,我想我可能有一個很好的解決方案......

  • 創建一個實例變量/屬性“initialLoad”
  • 首先在 viewDidLoad 中將其設置為 TRUE
  • 然后在 becomeActive 方法中執行以下操作:

代碼:

- (void)becomeActive:(NSNotification *)notification {
    if (!self.initialLoad) {
        [self updateEventData];
        [self.tableView reloadData];
    }
    self.initialLoad = false;
}

似乎工作正常...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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