簡體   English   中英

跨ViewController共享數據

[英]Sharing data across ViewControllers

在閱讀了很多stackoverflow的帖子和論壇后,我對此主題感到非常困惑。 很多人談到使用委托,但是如果有大量數據,可能會導致內存問題。

我只能處理來自TCP / IP設備的大約600字節的數據,並用新的值覆蓋現有值。

我制作了一個具有特殊視圖和TCP / IP套接字的RootViewController ,此外,我還有兩個其他ViewController,它們必須使用RootViewController (TCP / IP)中的數據。

我是否應該為TCP內容創建一個單獨的類,而不是在RootViewController中將其混淆?

另外,我應該如何處理跨ViewController的數據共享?

提前致謝。

如果您正在使用TCP“東西”做很多事情(例如獲取數據,顯示數據,重新格式化數據,補全或更改數據然后重新保存等),那么我建議創建一個單獨的類(可能是NSObject) )具有處理TCP內容的所有方法,然后在根視圖控制器中創建該對象的實例。

至於在其他視圖控制器中獲取數據,則必須在其他視圖控制器中創建對根視圖控制器的引用,然后將它們連接到接口構建器中(或以編程方式)。 只要確保您沒有創建根視圖控制器的全新實例即可(即,不要使用[[RootViewController alloc] init];)

那有意義嗎? 如果您發布有關應用程序結構的更多信息(例如您是否正在使用導航控制器等),我可能會更適合您。

祝好運!

要在類之間共享數據,可以使用通知機制。 在您的FromClass.m中發布通知:

NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:yourTCPData, @"TCPData", nil];
[[NSNotificationCenter defaultCenter] postNotificationName:@"gotTCPData" object:nil userInfo:options];

在您的ToClass.m viewDidLoad中添加以下內容:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(makeSomeThingUsefulWithTCPData:)name:@"gotTCPData" object:nil];

...在您的ToClass.m中的某個位置添加以下方法:

- (void)makeSomeThingUsefulWithTCPData:(NSNotification *)notification {
  NSDictionary *dict = [notification userInfo];
  yourTCPDataClass *yourTCPDataObject = [dict objectForKey:@"TCPData"];
  // Here make something useful with your TCP data
  }

還要在您的ToClass.m viewDidUnload中添加此代碼,以在卸載視圖時釋放觀察者對象:

[[NSNotificationCenter defaultCenter] removeObserver:self];

暫無
暫無

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

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