Core-data managedObjectContext - откуда они берутся? - PullRequest
3 голосов
/ 26 марта 2011

Я просто смотрю на Objective-c меньше месяца и определенно новичок.

Я пытаюсь записать некоторые данные, полученные из веб-службы.Эти данные называются «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 Ответ

6 голосов
/ 26 марта 2011

Если вы используете шаблон Core Data от Apple, самый простой способ - получить его из AppDelegate, например:

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

более чистым решением было бы создать переменную экземпляра и синтезировать g / setters.
Затем вы можете передать экземпляр NSManagedObjectContext (скорее всего из AppDelegate) в viewController при его создании.

...