NSMutableArray从一个viewcontroller复制到另一个viewcontroller?
FirstViewController
有一个NSMutableArray
声明为firstArray
。 我想复制第二secondArray
到firstArray
。
在SecondViewController中,
Self.FirstViewController.firstArray = self.secondArray;
当我试图从FirstViewController
NSLog
第一firstArray
FirstViewController
,它显示0.它应该有两个对象在数组
任何人都可以就此提出build议?
您可以select以下解决scheme之一:
- 独生子
- 在
ViewControllers
之间传递数据 - 代表团
您可以在这里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
方法中删除通知。
希望能帮助到你。