我正在尝试通过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];
}
所以我试图将目标的数据设置为我已经拥有的一些数据,并且我正在尝试动态更改标题。标题更改无效,数据行丢失错误。我猜我只是误解了它是如何工作的,所以任何帮助或澄清都会很棒。谢谢!
答案 0 :(得分:0)
当你执行segue时,故事板会处理UIViewController的alloc + init,所以你不需要进行初始化。您可以使用属性设置数据。
答案 1 :(得分:0)
您能否显示实际的“无法识别的选择器发送到实例...”错误?这里可能会出现不同的错误,具体取决于哪个选择器被发送到哪个对象。
但一般来说,当你处理“无法识别的选择器”时,第0步是确定对象是否真的是你认为的那样。在这种情况下,请确保[segue destinationViewController]
确实是ASExpenseList
。我怀疑,因为ASExpenseList
听起来像模型或视图,顾名思义[segue destinationViewController]
会返回一个视图控制器。
验证destinationViewController
身份的一些策略包括:
NSLog("dest: %@", [segue destinationViewController]);
NSLog("dest class: %@", [segue destinationViewController]);
target
。target
内查询po
。答案 2 :(得分:0)
在newExpenses
课程中添加ASExpenseList
作为媒体资源。将其设置在prepareForSegue
中,然后使用您传递的NSArray在viewDidLoad
的{{1}}中填充tableView。