Objective c NSMutablearray是否设置为(空)?
所以我在FirstViewController和SecondViewController中有两个视图控制器Objective c NSMutablearray是否设置为(空)?,objective-c,cocoa-touch,ios4,Objective C,Cocoa Touch,Ios4,所以我在FirstViewController和SecondViewController中有两个视图控制器 NSMutableArray *array; 在FirstViewController中 NSMutableArray *array; 为其创建属性并对其进行合成 在SecondViewController中 NSMutableArray*arraySecond 创建一个属性并将其合成 然后我尝试这样做(在arraySecond设置为类似于b c d的值之后) 我尝试这样做,但当我
NSMutableArray *array;
在FirstViewController中
NSMutableArray *array;
为其创建属性并对其进行合成
在SecondViewController中
NSMutableArray*arraySecond
创建一个属性并将其合成
然后我尝试这样做(在arraySecond设置为类似于b c d的值之后)
我尝试这样做,但当我尝试从firstviewcontroller打印阵列时,它被设置为(null)为什么它会这样做?我可以做些什么来修复它
FirstViewController *FV = [[FirstViewController alloc]init];
secondViewController *SV = [[secondViewController alloc]init];
//here create secondArray
[FV SetArray:SV.arraySecond];
如果您合成了arraySecond,那么
[self.arraySecond release]
您正在创建FirstViewController
的实例,设置数组的值,然后释放该实例,该实例将取消分配对象。所以所有的努力都白费了。由于这是在SecondViewController
中,因此我假设此时存在FirstViewController
,因此您不应该设置FirstViewController
的新实例的数组
,而是尝试将其传递给现有实例。由于您已经声明了一个在视图控制器之间共享的属性,我们将使用它
在FirstViewController
中实例化SecondViewController
实例时执行此操作
SecondViewController * viewController = [[SecondViewController alloc] init];
self.array = [NSMutableArray array];
viewController.arraySecond = self.array;
[self.navigationController pushViewController:viewController animated:YES];
[viewController release];
现在,阵列在视图控制器之间共享。不要在其他地方初始化arraySecond
属性,以便它们都指向同一个对象,并且对arraySecond
所做的更改对FirstViewController
实例可见。返回到FirstViewController
实例后,使用array
属性访问您添加的值
对象共享的替代方法是委托机制和通知。你也可以调查一下。就目前而言,这应该是可行的。您是如何进行合成的?@synthesis array@合成阵列秒;AFAIK Obj-C区分大小写,因此您应该注意不要复制SetArray
,而是使用SetArray
(注意小写字母s);如果你合成数组,那么你可以使用点语法。否则你必须这样使用。