ios - 当它们是两个 View 之间的导航 Controller 时,如何将 managedObjectContext 从 appDelegate 传递到第一个 ViewController

标签 ios delegates uinavigationcontroller storyboard moc

在研究和尝试弄清楚如何解决以下问题时,我已经在键盘上敲打了 3 天多了。

我有一个看起来像这样的 Storyboard:

初始应用程序启动箭头 -> 指向导航 Controller -> 指向主视图 Controller 。

我的 appDelegate 正在创建 managedObjectContext 并用数据填充一些实体(仅用于测试目的 atm,一旦我准备好与外部源集成,它将被删除)。这个工作正常。现在我的问题是我不知道如何将 MOC 从 appDelegate 传递到我的第一个 ViewController,因为导航 Controller 挡住了路。我当前在 appDidFinish 方法中的代码如下所示:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

    // Pass the managed object context to the root view controller
    MainMenuViewController *rootView = (MainMenuViewController *)self.window.rootViewController;
    rootView.managedObjectContext = self.managedObjectContext; 

    //My actual Core data setup and adding data to it, it works I've tested it.

    return YES;
     }

现在,当我将 Storyboard 中应用程序启动箭头的位置更改为指向我的 mainMenuViewController 时,我的代码可以正常工作,但是我所做的却在所有 View 中丢失了导航栏。我也知道如何通过 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 将 MOC 从我的 mainMenu 传递到另一个 View ,但我似乎无法弄清楚由于该死的导航 Controller 介于两者之间,因此如何进行从 appDelegate 到 MainViewController 的初始传递。

我已经在这个网站(和其他网站)上搜索了很多主题,我只找到了“选项卡式应用程序”的解决方案,其他人希望我序列化该对象,但出于我的目的,我不能这样做. (只有少数 View 会收到 MOC,其他 View 将传递一个 View 创建和更改的数据,以便在独特的 View 中针对特定目的进行定制)

非常感谢对 iOS 和 Objective-C 中的这个小结的任何帮助。提前谢谢你。

编辑:我得到的错误是“由于未捕获的异常而终止应用程序...... [UINavigationController setManagedObjectContext] 无法识别的选择器发送到实例......

最佳答案

如果您在 Xcode 4.3(我认为还有 4.2)中从“Master-Detail”应用程序模板创建一个新应用程序,并选中“Use Storyboard”和“Use Core Data”选项,您会发现AppDelegate.m 中的以下内容:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
    UINavigationController *navigationController = (UINavigationController *)self.window.rootViewController;
    MasterViewController *controller = (MasterViewController *)navigationController.topViewController;
    controller.managedObjectContext = self.managedObjectContext;
    return YES;
}

这似乎正是您要找的。关键是您可以查询导航 Controller 以获取其 View Controller 。

关于ios - 当它们是两个 View 之间的导航 Controller 时,如何将 managedObjectContext 从 appDelegate 传递到第一个 ViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9747334/

相关文章:

objective-c - 如何检测 Web 服务器上是否存在文件

ios - Objective C Delegate - 查找父类的名称

swift - 进入前台后呈现 View

ios - 从详细信息页面返回表格 View ,无需重新加载表格

c++ - OpenCV 在使用 C++ 的 iOS 上使用 base64 通过 HTTP 发送图像

ios - swift 3.0 中的 Firebase 数据解析问题

c# - Delegate 类中 invoke 方法的声明在哪里?

c# - 允许客户端委托(delegate)覆盖默认行为的模式

iphone - iOS - 从 MFMailComposeViewController 中删除 UIImageView

ios - Alamofire4 迁移,Apple Mach-O Linker (id) 错误