2010-10-18 85 views
0

我试图从我的应用程序委托传递一个上下文到我的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上的书籍,并尝试使用迄今为止所了解的内容创建简单的应用程序。核心数据应用程序看起来不是太简单就是高于我的头脑,我试图跳槽。任何帮助将不胜感激!谢谢。

+0

请花一点时间来设置您的问题的格式(选择代码块并单击代码按钮)。懒惰的问题可以减少获得帮助的机会。 – 2010-10-18 20:21:49

+0

不知道这里发生了什么事。我这样做就是这样做的(将托管对象上下文从“自上而下”分配给一个属性),它适用于我。 – Nimrod 2010-10-18 23:34:39

+0

这是第一次发布,所以我一定会尝试按照格式,谢谢你的提升。 – JC43 2010-10-19 00:00:57

回答

0
if(managedObjectContext == nil) 
{ 
    AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
    managedObjectContext = [appDelegate managedObjectContext]; 
} 
+0

感谢您的回答,我在其他帖子中看到过这一行,但我并没有真正理解它。它应该去哪里?在AppDelegate viewdidload中?或根控制器?我阅读它的方式是创建一个新的appdelegate实例,为什么需要这样做?我试着将它放在appdidfinishloading中,并得到一个错误,声明“ - [Swaps3AppDelegate context]:无法识别的选择器发送到实例0x612d630”。 – JC43 2010-10-19 00:09:32

+0

另外我不明白为什么原始代码中的上下文是有效的,因为我将它传递给rootview,直到我推入rootview。我知道这些可能是非常基本的想法,但我仍然试图用尽可能多的资源包围我的头。谢谢你的澄清。 – JC43 2010-10-19 00:10:01

0

我发现我在做什么错了,我没有把我的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]];

以前在我的应用程序导航控制器未设置都将被推一切都完美无缺!

相关问题