[英]When do I init the segue controller UIViewController:prepareForSegue:?
[英]How do I edit my segue target data through prepareForSegue?
我正在尝试通过prepareForSegue
编辑segue目标的数据,但是我尝试执行的所有操作始终返回“发送给实例的无法识别的选择器...”错误。 有没有一种特殊的方法可以编辑目标数据,在我编辑目标数据之前将其删除还是类似的方法? 我刚开始捡起这些东西,所以我仍然一无所知。 这是我的一些代码示例
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if([segue.identifier isEqualToString:@"managerSegue"]){
ASExpenseList *target = [segue destinationViewController];
NSIndexPath *row = [self.tableView indexPathForSelectedRow];
self.cellPressed = row.row;
switch(self.cellPressed){
case 0:
[target initWithData:self.oneTimeExpenses]; //PROBLEM LINE
// target.expenses = [[NSMutableArray alloc] initWithArray:self.oneTimeExpenses]; ALSO PROBLEM
target.title = @"One-Time"; //not breaking the program but not working
我要调用的ASExpenseList
函数非常简单:
-(void) initWithData:(NSMutableArray *)newExpenses {
self.expenses = newExpenses;
[self.tableView reloadData];
}
因此,我试图将目标的数据设置为我已经拥有的某些数据,并且试图动态更改标题。 标题更改无效,数据行引发错误。 我猜想我只是误解了它的工作原理,因此任何帮助或澄清都将是很棒的。 谢谢!
当执行segue时,情节提要会处理UIViewController的alloc + init,因此您无需进行初始化。 您可以使用属性设置数据。
您能显示出您收到的实际“无法识别的选择器发送给实例...”错误吗? 根据将选择器发送到哪个对象的不同,这里可能会出错。
但是通常,当您处理“无法识别的选择器”时,第0步将确定对象是否确实是您认为的真实对象。 在这种情况下,请确保[segue destinationViewController]
确实是ASExpenseList
。 我很怀疑,因为ASExpenseList
听起来像是模型或视图,顾名思义, [segue destinationViewController]
返回一个视图控制器。
验证destinationViewController
身份的一些策略包括:
NSLog("dest: %@", [segue destinationViewController]);
NSLog("dest class: %@", [segue destinationViewController]);
target
。 po
询问target
。 将newExpenses
作为属性添加到ASExpenseList
类中。 在您的prepareForSegue
设置,并使用传递的NSArray在ASExpenseList
的viewDidLoad
中填充tableView。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.