我有一个名为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];
答案 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]
,如果可行,那么这就是你的问题。