Objective-C =>无法更新CoreData中的现有对象

时间:2011-11-22 17:58:40

标签: objective-c core-data

我无法使用核心数据更新数据库中的对象,这是我的函数:

- (void) saveItem:(NSDictionary*)dico {

    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Item" 
        inManagedObjectContext:managedObjectContext];
    Item *item =(Item *)[entity ReadSingleForKey:@"identifier"
                                           value:[dico valueForKey:@"identifier"]
                                       inContext:managedObjectContext];
    if (!item) {
        item = [[[NSManagedObject alloc] initWithEntity:entity
            insertIntoManagedObjectContext:managedObjectContext] autorelease];
        item.identifier = [dico valueForKey:@"identifier"];
    }
    item.title = [dico valueForKey:@"title"];
    NSError *error = nil;
    if (![managedObjectContext save:&error])
    {
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }else{
        NSLog(@"No error found.");
    }
}

即使“item”不是nil,数据库中的对象也不会改变&我总是“找不到错误。”。

- (NSManagedObject *) ReadSingleForKey:(NSString *) key 
        value:(id) value inContext:(NSManagedObjectContext *) context{

    NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease];
    [request setEntity:self];

    [request setPredicate:[NSPredicate predicateWithFormat:@"%K = %@", key, value]];
    [request setFetchLimit:1];

    NSError *error;
    NSArray *arr = [context executeFetchRequest:request error:&error];
    if (arr && [arr count]) {
        return [arr objectAtIndex:0];
    }
    return nil;
}

任何想法??

2 个答案:

答案 0 :(得分:3)

您的代码存在一些问题,导致难以确定错误。

1)没有错误处理。
2)模糊的私人方法ReadSingleForKey - 它返回什么?
3)item在同一方法中定义为类型Item和不同类型NSManagedObject

输入NSLog语句或断点来检查dicoitem的值。你很快就会找到出错的地方。

此错误的另一个潜在来源是您以后如何从数据库中读取数据。现在我假设这是正常的。

答案 1 :(得分:0)

问题出在我的Item类中:

我使用@synthesize代替@dynamic