我一直在看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);
}
谢谢 - 我感谢您的帮助!
答案 0 :(得分:6)
如果您使用的是Apple的Core Data模板,最简单的方法是从AppDelegate获取它,如下所示:
context = [(AppDelegate_Shared *)[[UIApplication sharedApplication] delegate] managedObjectContext];
更清洁的解决方案是创建一个实例变量并合成g / setters
然后,您可以在创建时将NSManagedObjectContext
实例(很可能来自AppDelegate)传递给viewController。