核心数据managedObjectContext - 它来自哪里?

时间:2011-03-26 08:15:40

标签: objective-c core-data nsmanagedobjectcontext

我一直在看Objective-c不到一个月,绝对是新手。

我正在尝试编写一些我从Web服务检索到的数据。这个数据叫做“Sens”,我创建了Core-data结构和NSManagedObject类 - “Sens.h”。我一直在尝试创建Sens对象的几种不同方法,但我很难确定上下文(NSManagedObjectContext)。我读到它应该来自对象(这是下面的代码) - 不工作。我也尝试过self.managedObjectContext - 也没用。

此处代码 - 问题行是:

NSManagedObjectContext *context = [Sens managedObjectContext];
Sens *newSens = [NSEntityDescription insertNewObjectForEntityForName:@"Sens" inManagedObjectContext:context];

整段代码是:

#import "RootViewController.h"
#import "XMLElement.h"
#import "Sens.h"


@implementation RootViewController

@synthesize xmlDocument;


-(void) xmlDocumentDelegateParsingFinished:(XMLDocument *)paramSender {
NSLog(@"Finished downloading and parsing the remote XML");
// loop through the parsed items - sens
if ([paramSender.rootElement.name isEqualToString:@"ArrayOfSensItem"]) {
    for (int i = 0; i < [paramSender.rootElement.children count]; i++) {
        XMLElement *element = [[XMLElement alloc] init];
        element = [paramSender.rootElement.children objectAtIndex:i];

        // we would like to create a new sens object that must be written away
        NSManagedObjectContext *context = [Sens managedObjectContext];
        Sens *newSens = [NSEntityDescription insertNewObjectForEntityForName:@"Sens" inManagedObjectContext:context];

        for (int j = 0; j < [element.children count]; j++) {
            // another element - this is the actually interesting stuff
            XMLElement *childElement = [[XMLElement alloc]init];
            childElement = [element.children objectAtIndex:j];

            if (newSens != nil) {
                // body
                if ([childElement.name isEqualToString:@"body"])
                    newSens.body = childElement.text;

                // company code list
                newSens.company = @"";

                // headline
                newSens.heading = childElement.text;

                // newsid
                newSens.sensID = (NSNumber *)[childElement.text intValue];

                // sens date
                NSDateFormatter *dateFormat = [[NSDateFormatter alloc]init];
                [dateFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
                newSens.sensDate = [dateFormat dateFromString:childElement.text];

                // display
                NSLog(@"Name: %@",childElement.name);
            }

            [childElement release];
        }

        // save the unsaved changes into the context
        NSError *savingError = nil;
        if ([context save:&savingError] == YES){
            NSLog(@"Successfully saved the SENS item: %@",newSens.sensID);
        } else {
            NSLog(@"Failed to create a new SENS record.");
        }

        [newSens release];



        // release the element
        [element release];

    }
}
NSLog(@"Root element: %@",paramSender.rootElement.name);
}

谢谢 - 我感谢您的帮助!

1 个答案:

答案 0 :(得分:6)

如果您使用的是Apple的Core Data模板,最简单的方法是从AppDelegate获取它,如下所示:

context = [(AppDelegate_Shared *)[[UIApplication sharedApplication] delegate] managedObjectContext];

更清洁的解决方案是创建一个实例变量并合成g / setters 然后,您可以在创建时将NSManagedObjectContext实例(很可能来自AppDelegate)传递给viewController。