Objective-C => Невозможно обновить существующие объекты в CoreData - PullRequest
0 голосов
/ 22 ноября 2011

Я не могу обновить объекты в моей базе данных, используя основные данные, это моя функция:

- (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 ]

3 голосов
/ 23 ноября 2011

Есть несколько проблем с вашим кодом, которые затрудняют определение ошибки.

1) Нет обработки ошибок.
2) Непонятный закрытый метод ReadSingleForKey - что он возвращает?
3) item определяется как тип Item и как другой тип NSManagedObjectв том же методе.

Вставьте NSLog операторы или точки останова, чтобы проверить значения dico и item.Вскоре вы найдете место, где вы идете не так.

Еще один потенциальный источник этой ошибки - то, как вы читаете данные из базы данных позже.Пока я предполагаю, что это работает правильно.

0 голосов
/ 29 ноября 2011

Проблема была в моем классе предметов:

Я использовал @synthesize вместо @dynamic

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...