NSMutableArray从一个viewcontroller复制到另一个viewcontroller?

FirstViewController有一个NSMutableArray声明为firstArray 。 我想复制第二secondArrayfirstArray

在SecondViewController中,

 Self.FirstViewController.firstArray = self.secondArray; 

当我试图从FirstViewController NSLog第一firstArray FirstViewController ,它显示0.它应该有两个对象在数组

任何人都可以就此提出build议?

您可以select以下解决scheme之一:

  1. 独生子
  2. ViewControllers之间传递数据
  3. 代表团

您可以在这里find所有您需要的信息: https : //stackoverflow.com/a/9736559/1578927

单例子:

 static MySingleton *sharedSingleton; + (void)initialize { static BOOL initialized = NO; if(!initialized) { initialized = YES; sharedSingleton = [[MySingleton alloc] init]; } } 

它看起来像第二个数组已经被释放时,通过引用到第一个视图控制器,或第一个视图控制器本身已经被删除。 如果第一个是真的,那么您可能需要一个不同的模型对象来保存您的数据,而不是将其保存在您的应用程序的控制器层。 如果情况并非如此,那么你可能要考虑直接复制。 这样做的最简单的方法是将firstArray属性声明为关键字副本,而非强大的接口文件。

如果您确实需要将数据保存在应用程序的模型层中,那么单例模式对象确实是实现这一点的一种方式,正如EXEC_BAD_ACCESS(好名字!)所指出的那样。 一个稍微更现代的(尽pipe在function上相当于)写一个单身的方式如下。

 @interface MySingleton : NSObject @property (strong, readwrite) id myData; + (id)sharedSingleton @end @implementation MySingleton + (id)sharedSingleton { static MySingleton *singleton = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ singleton = [[MySingleton alloc] init]; // Do other setup code here. }); return singleton; } @end 

请注意dispatch_once的使用 – 这确保了静态单例只能创build一次(而从技术angular度而言,您可以像手动一样多次调用+ [NSObject initialize],尽pipe我从不build议这样做)。

您也可以利用NSNotificationCenter

SecondViewController.m

  [[NSNotificationCenter defaultCenter] postNotificationName:@"arrayFromSecondVC" object:secondArray]; 

FirstViewController.m

 - (void)viewDidLoad { [super viewDidLoad]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(populateArray:) name:@"arrayFromSecondVC" object:nil]; } -(void)populateArray:(NSNotification *)notif { self.firstArray = [notif object]; } 

并在viewUnload或didRecieveMemoryWarning方法中删除通知。

希望能帮助到你。