我有一个NSMutableArray
在FirstViewController
声明为firstArray
。 我想将复制secondArray
到firstArray
。
在SecondViewController,
Self.FirstViewController.firstArray = self.secondArray;
当我尝试NSLog
的firstArray
从.Count之间FirstViewController
,它显示0。应具有阵列中的两个对象
任何人都可以在此建议?
您可以选择此解决方案之一:
- 独生子
- 之间传递数据
ViewControllers
- 代表团
你可以找到你需要在这里的所有信息: https://stackoverflow.com/a/9736559/1578927
辛格尔顿例如:
static MySingleton *sharedSingleton;
+ (void)initialize
{
static BOOL initialized = NO;
if(!initialized)
{
initialized = YES;
sharedSingleton = [[MySingleton alloc] init];
}
}
它看起来像要么使参考第一视图控制器当所述第二阵列已经被解除分配,或第一视图控制器本身已经nilled出来。 如果第一个是真实的,那么你可能需要一个不同的模型对象来保存你的数据,而不是在您的应用程序的控制层坚持它。 如果不是的话,那么你可能要考虑直接复制。 这样做的最简单的方法是将firstArray财产申报作为关键字的副本,而不是强在接口文件。
如果你需要坚持你的应用程序的模型层中的数据,一个单件模式对象确实是实现这一目标的EXEC_BAD_ACCESS的一种方式(好听的名字!)指出。 稍微更现代的(虽然功能上等同)写单的方法如下。
@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的 - 这使得肯定的是,静态单只能创建一次(而从技术上讲,你可以调用+ [NSObject的初始化]多次,你感觉像手动,但我从来没有建议这样做)。
您还可以利用的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
方法。
希望能帮助到你。
文章来源: Copying of NSMutableArray from one viewcontroller to another viewcontroller?