从其他类添加对象到NSMutableArray

时间:2011-05-18 04:22:35

标签: objective-c ios uitableview nsmutablearray

我有一个名为PresidentsViewController的视图控制器类,它在UITableView中设置数据。此数据的格式为NSMutableArray,称为list。我有另一个类PresidentAddController,它应该根据用户输入的有关总统的数据,将President类型的对象添加到此列表中。但是,我无法将对象添加到列表中。我已经确认正在正确收集用户为新总统输入的数据,因此它正在添加到导致问题的另一个类中的列表中。我相信将对象添加到列表中的正确代码是:

[pvc.list addObject:newPresident];

但是,我不知道如何正确创建引用/实例/? (这是pvc将是什么)到PresAdadController内部的PresidentsViewController,以便我可以正确地将新的总统添加到列表中。我没有使用Interface Builder,因为它只是一个UITableView。

在这种情况下如何将总统添加到列表中?

编辑:以下是数组的初始化方式:

@property (nonatomic, retain) NSMutableArray *list;

以下是在PresidentsViewController中设置PresidentAddController的方法:

PresidentAddController *childController = [[PresidentAddController alloc] initWithStyle:UITableViewStyleGrouped];
childController.title = @"Add President";
[self.navigationController pushViewController:childController animated:YES];
[childController release];

2 个答案:

答案 0 :(得分:1)

以这种方式添加指向PresidentAddController的指针:

// in @interface
PresidentsViewController *listController;

@property (nonatomic, assign) PresidentsViewController *listController;

// in @implementation
@synthesize listController;

然后,当您实例化PresidentAddController时,设置指针:

PresidentAddController *childController = 
  [[PresidentAddController alloc]
   initWithStyle:UITableViewStyleGrouped];
childController.title = @"Add President";
childController.listController = self;
[self.navigationController pushViewController:childController animated:YES];
[childController release];

那么你可以[listController.list addObject:newPresident];中的PresidentAddController

编辑: childController.listController = self调用[childController setListController:self],后者又会在您的实现中读取@synthesize d方法并将指针*listController设置为指向到当前类(如果您在PresidentsViewController类中编写代码,那么self将成为PresidentsViewController的当前实例。

我使用assign的原因是因为如果您使用retain,那么当您将listController设置为self时,它实际上会保留对PresidentsViewController的拥有引用宾语。如果您尝试取消分配PresidentAddController,这可能会导致各种问题,因为如果您在assign中拥有一个拥有引用,那么在该引用也被释放之前它不会解除分配。使用PresidentsViewController可确保如果您在PresidentAddController消失之前释放retain,则会正确解除分配。当然,也许你想在这种情况下保持它,在这种情况下使用{{1}}也没关系。

答案 1 :(得分:0)

我怀疑这里有一个属性被定义为@property (nonatomic,copy) NSMutableArray *list;你是否正在尝试将对象添加到数组中?如果是这样,可能是因为复制修饰符返回了数组的不可变副本。尝试创建一个方法来获取对象并将其添加到列表而不使用self.list ...只是[list addObject],如果可行,那么这就是你的问题。