insertNewObjectForEntityForName

insertNewObjectForEntityForName

我会尝试揭露我的问题,因为这有点复杂。
我使用了核心数据,但是存储的数据有问题。
当我使用此代码时:

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];
    }

ecc。问题是NSLog打印的值是正确的(“结果”包含某些内容),但itemMessage始终包含0个键/值对(它似乎为空)。
为了理解是什么问题,我回过头去发现在insertNewObjectForEntityForName中我也遇到了这个问题,这是我将消息数据保存在核心数据中时使用的代码:
for (id key in objectMessage) {
    ItemMessage *itemmessage = [[ItemMessage alloc] init];
    itemmessage.itemMessageId = [key objectForKey:@"itemMessageId"];
    itemmessage.message = [key objectForKey:@"message"];
    itemmessage.sender = [key objectForKey:@"sender"];
    itemmessage.users = [key objectForKey:@"users"];

    NSManagedObjectContext *context = [appDelegate managedObjectContext];
    NSManagedObject *newMessage;
    newMessage = [NSEntityDescription insertNewObjectForEntityForName:@"ItemMessage" inManagedObjectContext:context];
    [newMessage setValue: itemmessage.itemMessageId forKey:@"itemMessageId"];
    [newMessage setValue: itemmessage.message forKey:@"message"];
    [newMessage setValue: itemmessage.sender forKey:@"sender"];
    [newMessage setValue: itemmessage.users forKey:@"users"];
    [context save:&error];
    if (error != nil) {
        NSLog(@"Coredata error");
    }

问题是newMessageinsertNewObjectForEntityForName之后的setValue也包含0个键/值对。
你能帮助我吗?

最佳答案

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

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功能中受益。

10-04 13:57