如何将managedObjectContext传递给第二个和第三个视图
我试图从我的应用程序委托传递一个上下文到我的rootview,然后到我的次要视图。次要视图是所有数据真正加载的位置,rootview只是几个关键点的简要概要。当我实例化的appDelegate上下文我登录检查,如果它不是零:如何将managedObjectContext传递给第二个和第三个视图
NSManagedObjectContext *context = [self managedObjectContext];
if (!context) {
//Handle error
}
if (context == nil) {
NSLog(@"Context is nil in appdelegate");
}
else {
NSLog(@"Context is set in appdelegate");
}
然后设置RootViewController的上下文为
rootViewController.context = context;
其次是相同的检查,都显示不为零。然后我推动视图。然后我检查在viewDidLoad期间是否设置了上下文,它是零。 rootViewController:
#import <UIKit/UIKit.h>
@interface RootViewController : UITableViewController <NSFetchedResultsControllerDelegate> {
NSFetchedResultsController *fetchedResultsController;
NSManagedObjectContext *context;
NSMutableArray *rootViewContentArray;
}
@property (nonatomic, retain) NSFetchedResultsController *fetchedResultsController;
@property (nonatomic, retain) NSManagedObjectContext *context;
@end
#import "RootViewController.h"
#import "DetailViewController.h"
#import "SwapViewController.h"
#import "Swap.h"
@implementation RootViewController
@synthesize fetchedResultsController, context;
#pragma mark -
#pragma mark View lifecycle
- (void)viewDidLoad {
[super viewDidLoad];
//initialize array for rootView
rootViewContentArray = [[NSMutableArray alloc] init];
NSArray .....set array values....
//check context
if (context == nil){
NSLog(@"RootViewcontroller context is nil during viewdidload");
}
if (!(context == nil)){
NSLog(@"RootViewcontroller context is set during viewdidload");
}
//fill array
.........
}
我错过了一些小事,还是我在这里有一个根本性的误解?此外,在我看来,如果我在视图上设置了一个变量,我创建它应该仍然在视图加载时实例化。我正在浏览示例应用程序并使用Apress开发的iPhone上的书籍,并尝试使用迄今为止所了解的内容创建简单的应用程序。核心数据应用程序看起来不是太简单就是高于我的头脑,我试图跳槽。任何帮助将不胜感激!谢谢。
if(managedObjectContext == nil)
{
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
managedObjectContext = [appDelegate managedObjectContext];
}
感谢您的回答,我在其他帖子中看到过这一行,但我并没有真正理解它。它应该去哪里?在AppDelegate viewdidload中?或根控制器?我阅读它的方式是创建一个新的appdelegate实例,为什么需要这样做?我试着将它放在appdidfinishloading中,并得到一个错误,声明“ - [Swaps3AppDelegate context]:无法识别的选择器发送到实例0x612d630”。 – JC43 2010-10-19 00:09:32
另外我不明白为什么原始代码中的上下文是有效的,因为我将它传递给rootview,直到我推入rootview。我知道这些可能是非常基本的想法,但我仍然试图用尽可能多的资源包围我的头。谢谢你的澄清。 – JC43 2010-10-19 00:10:01
我发现我在做什么错了,我没有把我的RootViewController的为我的navigationController在我的appDelegate。我现在的问题是为什么我的程序会正常运行,直到我尝试访问rootview中的Core Data对象?
RootViewController *rootViewController = [[RootViewController alloc] initWithStyle:UITableViewStyleGrouped];
rootViewController.managedObjectContext = [self managedObjectContext];
if (rootViewController.managedObjectContext == nil) {
NSLog(@"RootViewcontroller context is nil before view is pushed");
}
if (!(rootViewController.managedObjectContext == nil)){
NSLog(@"RootViewcontroller context is SET before view is pushed");
}
// Add the navigation controller's view to the window and display.
[window addSubview:[navigationController view]];
[window makeKeyAndVisible];
现在,该代码读取
RootViewController *rootViewController = [[RootViewController alloc] initWithStyle:UITableViewStyleGrouped];
rootViewController.managedObjectContext = [self managedObjectContext];
self.navigationController = [[UINavigationController alloc] initWithRootViewController:rootViewController];
if (rootViewController.managedObjectContext == nil) {
NSLog(@"RootViewcontroller context is nil before view is pushed");
}
if (!(rootViewController.managedObjectContext == nil)){
NSLog(@"RootViewcontroller context is SET before view is pushed");
}
[rootViewController release];
// Add the navigation controller's view to the window and display.
[window addSubview:[navigationController view]];
[window makeKeyAndVisible];
:我为什么要创建的rootView通过调用
[window addSubview:[navigationController view]];
以前在我的应用程序导航控制器未设置都将被推一切都完美无缺!
请花一点时间来设置您的问题的格式(选择代码块并单击代码按钮)。懒惰的问题可以减少获得帮助的机会。 – 2010-10-18 20:21:49
不知道这里发生了什么事。我这样做就是这样做的(将托管对象上下文从“自上而下”分配给一个属性),它适用于我。 – Nimrod 2010-10-18 23:34:39
这是第一次发布,所以我一定会尝试按照格式,谢谢你的提升。 – JC43 2010-10-19 00:00:57