簡體   English   中英

如何正確地從一個UIViewController傳遞NSArray / NSMutableArray到另一個

[英]How to properly pass NSArray / NSMutableArray from one UIViewController to another

我正在使用的iPhone應用程序會定期終止...我有一種感覺,這是因為我如何在多個視圖控制器之間訪問共享的NSArray。 所以...

在多個ViewController之間傳遞NSArray / NSMutableArray的最佳方法是什么?所有這些控制器都可以將其修改和/或設置為nil或其他值?

謝謝

一般來說,有兩種方法。

在第一種方法中,當實例化下一個視圖控制器時,可以將數組屬性設置為從當前(即將成為上一個或父級)視圖控制器“繼承”:

MyNextViewController *_myNextViewController = [[MyNextViewController alloc] initWithNibName:@"MyNextViewController" bundle:nil];
_myNextViewController.myViewControllerArray = self.myViewControllerArray;
...

在第二種方法中,可以在應用程序委托中創建myAppDelegateArray屬性,在應用程序初始化時實例化數組(或根據需要實例化其他地方)。

然后,您可以從任何類(包括視圖控制器)中為此屬性調用getter。

例如,在MyNextViewController的實例中,您可能具有一個名為myViewControllerArray的屬性,並將其設置如下:

self.myViewControllerArray = [UIAppDelegate myAppDelegateArray]; 

您可以在應用程序常量文件中的某處添加#define語句,例如:

#define UIAppDelegate ((MyAppDelegate *)[UIApplication sharedApplication].delegate)

或根據需要使用完整的[UIApplication sharedApplication].delegate調用。

作為一種通用方法,人們似乎更喜歡應用程序委托方法,因為它分散了對所需屬性的訪問權限。

使用這種方法,如果重新排列視圖控制器或將新的視圖控制器插入VC層次結構,則無需調試從父視圖控制器繼承的子視圖控制器屬性,因為始終可以從應用程序委托獲得引用。

您可能沒有保留它,它已被釋放,並且您嘗試再次訪問它。 嘗試將[myArray保留]發送到您正在使用的位置(在每個控制器中),並在完成后發送[myArray版本]

暫無
暫無

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

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