从不同对象访问对象中的NSMutableArray

时间:2011-03-30 05:26:16

标签: iphone object nsmutablearray nsarray

如何访问已在不同类中保湿的NSMutableArray? 有我的示例代码:

Class1.h:我有一个iVar NSMutableArray *anArray; 我在@synthesize anArray;

Class1.m

在RootViewController中,我导入了Class1.h并添加了@Class "Class1"; 在界面中,我在Class1 *aClass1;RootViewController.m@synthesize

中添加了ViewWillAppear
aClass1 = [[Class1 alloc] init];
aClass1.anArray = [[NSMutableArray alloc] initWithObjects: @"string1",@"string2",nil];
NSLog(@"aClass1.anArray is Class1 %@",aClass1.anArray); // It works as I expected

现在在新类我称之为DetailsViewController 与导入.h和RootViewController.h的{​​{1}}相同。 同样在@class "Class1";我导入了DetailsViewController.m

所以现在在DetailsViewController中我尝试在viewWillAppear

中执行此操作
"Class1.h"

我已在此地址中添加了此示例项目:http://www.epicdesign.com.au/test2.zip

2 个答案:

答案 0 :(得分:1)

在将其推入导航控制器之前,您只是忘记设置详细信息视图控制器的aClass1 ivar。以下是didSelectRowAtIndexPath方法中应该包含的代码:

DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
// ...
// Pass the selected object to the new view controller.
detailViewController.aClass1 = aClass1;  // this line was added
[self.navigationController pushViewController:detailViewController animated:YES];
[detailViewController release];

添加上面添加的行后,您的数组现在将在详细视图控制器中正确显示。

答案 1 :(得分:0)

您正在访问尚未在Class1.h中声明的属性,因此您必须添加:

@property (nonatomic, copy) NSMutableArray *anArray;

因为它应该工作,我宁愿不传递任何NSMutableArray作为参数。你最好在Class1.h中声明一个NSArray属性,将它传递给你的方法,然后mutableCopy在你想要对数组进行修改的地方(仅在方法内部)。请记住,mutableCopy和copy会增加数组的保留计数,因此必须在完成后释放它。