Ios CoreData insertNewObjectForEntityForName和executeFetchRequest返回nil

Ios CoreData insertNewObjectForEntityForName和executeFetchRequest返回nil,ios,objective-c,core-data,Ios,Objective C,Core Data,我会尽量暴露我的问题,因为它有点复杂。 我使用了核心数据,存储的数据有问题。 当我使用此代码时: NSManagedObjectContext *context = [appDelegate managedObjectContext]; NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"ItemMessage"]; NSError *error = nil; NSArray *results = [con

我会尽量暴露我的问题,因为它有点复杂。 我使用了核心数据,存储的数据有问题。 当我使用此代码时:

NSManagedObjectContext *context = [appDelegate managedObjectContext];
NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"ItemMessage"];
NSError *error = nil;
NSArray *results = [context executeFetchRequest:request error:&error];
NSMutableArray *values = [[NSMutableArray alloc] init];

if (error == nil) {
    for (int i = 0; i<results.count; i++) {
        NSLog(@"results %@",[results objectAtIndex:i]);
        ItemMessage *itemMessage = [results objectAtIndex:i];
        [values addObject:itemMessage];
    }
问题在于
insertNewObjectForEntityForName
之后的
newMessage
,以及
setValue
也包含0个键/值对。
您能帮助我吗?

当您插入以管理对象竞赛时,您必须调用save:method,并且saving方法应该类似于:

newMessage = [NSEntityDescription insertNewObjectForEntityForName:@"ItemMessage" inManagedObjectContext:context];
//  2
  newMessage.property1 = self.firstNameTextfield.text;
  newMessage.property2 = self.lastNameTextfield.text;

if (![context save:&error]) {
    NSLog(@"Error: %@", [error localizedDescription]);
  }

您似乎没有将新的托管对象正确插入到上下文中。
应该是:

for (id key in objectMessage) {
    NSManagedObjectContext *context = [appDelegate managedObjectContext];
    ItemMessage *itemmessage = (ItemMessage*)[NSEntityDescription insertNewObjectForEntityForName:@"ItemMessage" 
                                                                           inManagedObjectContext:context];
    itemmessage.itemMessageId = [key objectForKey:@"itemMessageId"];
    itemmessage.message = [key objectForKey:@"message"];
    itemmessage.sender = [key objectForKey:@"sender"];
    itemmessage.users = [key objectForKey:@"users"];
}
//save your inserts
要为托管对象创建类文件,您可以:

转到模型文件(xcdatamodeld)->
选择一个实体->
从菜单中选择:
编辑器->创建NSManagedObjectSubclass->选择您喜欢的类文件的实体。


现在,您将拥有可以轻松访问的托管对象(NSManagedObject子类),并从CoreData功能中获益。

谢谢,但我没有包括部分代码。当然,我使用(例如)[newMessage setValue:itemmessage.message forKey:@“message”]设置newMessages值;最后,我使用[context save:&error]进行保存;保存时不会出现任何错误。能否显示设置属性的代码并保存它。这不是我的问题,只是我没有包含部分代码。现在我已经编辑了这篇文章,我已经写了所有的代码!什么是
ItemMessage
(它是托管对象)?你为什么需要它?如何定义托管对象?ItemMessage是一个Coredata实体,在xcdatamodeld中定义,也是一个具有相同名称的模型(NSObject类)。托管对象(NSManagedObject子类)不应手动为“alloc init”,但是使用
insertNewObjectForEntityForName:inManagedObjectContext:
方法引入到上下文中,因此循环代码正在做一些它不应该做的事情。再看看我的答案。好的,你是对的,但是ItemMessage*ItemMessage=[[ItemMessage alloc]init]不是一个NSManagedObject,而是一个NSObject。可能我的问题是:我可以使用与NSManagedObject coredata实体同名的NSObject模型吗?
for (id key in objectMessage) {
    NSManagedObjectContext *context = [appDelegate managedObjectContext];
    ItemMessage *itemmessage = (ItemMessage*)[NSEntityDescription insertNewObjectForEntityForName:@"ItemMessage" 
                                                                           inManagedObjectContext:context];
    itemmessage.itemMessageId = [key objectForKey:@"itemMessageId"];
    itemmessage.message = [key objectForKey:@"message"];
    itemmessage.sender = [key objectForKey:@"sender"];
    itemmessage.users = [key objectForKey:@"users"];
}
//save your inserts