如何从 segue 方法初始化模型

Posted

技术标签:

【中文标题】如何从 segue 方法初始化模型【英文标题】:How to initialize model from segue method 【发布时间】:2013-01-30 11:56:23 【问题描述】:

嗨,我有一个 UITableViewController,它由 Playlist 对象填充,它们包含 Song 对象。我想要的是当用户在我的 TVC 中点击播放列表名称时触发 UIPageViewController,我将通过在 UITableViewController 中点击的播放列表初始化其模型。然后它会在另一个 ViewController 中显示我想要的东西。

UIPageViewController 实现在我的应用中是这样工作的:

ModelController --> RootViewController --> DataViewController(就像苹果的例子)

到目前为止,我已经启动并运行了所有内容,但是我无法使用被点击的播放列表正确初始化模型。在我的 PlaylistsTVC 中,我有一个 prepareForSegue 方法,它定义了目标视图控制器,并且 arr 保存了被点击的播放列表的歌曲,但我不知道如何将它传递给 ModelController。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

     if (sender)
     
         if ([segue.identifier isEqualToString:@"Segue"])
        
            NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
            NSArray *arr = @[[[self.pdc.playlistMasterList objectAtIndex:indexPath.row] songs]];
            NSLog(@"arr: %@", arr);
            RootViewController *rvc = (RootViewController *)segue.destinationViewController;
            rvc.hidesBottomBarWhenPushed = YES;
        
    

我尝试在我的 PlaylistDataController 类中设置一个数组,然后在 ModelController 类中创建一个新实例,但它不起作用。我还尝试在 NSUserDefaults 中对充满歌曲的数组进行编码和解码,然后将其传递给 ModelController,看看它是否可以工作,但也没有运气。

任何人都可以通过我上面描述的 segue 方法来帮助初始化页面视图控制器的模型吗?或者任何其他关于这个问题的想法都会非常受欢迎。

谢谢!

【问题讨论】:

【参考方案1】:

(我对你的控制器命名有点困惑......)

如果您想使用RootViewController 中的数组,那么您的方法基本上是正确的。您需要 rvc 中的属性并将其设置为 prepareForSegue。例如:

...
RootViewController *rvc = (RootViewController *)segue.destinationViewController;
[rvc.theArray initWithArray:arr];
...

【讨论】:

嗨 SAE。就是这样,模型数组不在 RootViewController 中。在模型控制器中(同样,我正在关注 Apple 的页面视图控制器实现类)。目前我从我的应用程序委托中创建了一个全局变量并且它正在工作,但我对它并不感到兴奋。 正如我所说:在 RootViewController 类中创建一个 NSArray 属性,并像在我的代码示例中一样设置它。这是在视图控制器之间传递数据的正常方法。

以上是关于如何从 segue 方法初始化模型的主要内容,如果未能解决你的问题,请参考以下文章

segue 如何创建目标 ViewController?

如何在 segue 中初始化 UIButton 的 titleLabel 字体?

在 Segue 之前初始化 ViewController

如何使用自定义类型属性从 JSON 初始化模型类

didSelectRowAtIndexPath Segue 返回垃圾

Segue 错误 - 未能在 nsmanagedobject 类上调用指定的初始化程序