如何通过prepareForSegue编辑我的segue目标数据?

时间:2013-12-26 17:13:57

标签: ios iphone objective-c segue

我正在尝试通过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];
}

所以我试图将目标的数据设置为我已经拥有的一些数据,并且我正在尝试动态更改标题。标题更改无效,数据行丢失错误。我猜我只是误解了它是如何工作的,所以任何帮助或澄清都会很棒。谢谢!

3 个答案:

答案 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
  • 在LLDB中设置断点并在target内查询po

答案 2 :(得分:0)

newExpenses课程中添加ASExpenseList作为媒体资源。将其设置在prepareForSegue中,然后使用您传递的NSArray在viewDidLoad的{​​{1}}中填充tableView。