2015-12-15 2 views
0
-(void)passDataBack:(PersonHolder *)contact{ 
    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Person"]; 
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"firstName == %@",contact.firstName]; 
    [request setPredicate:predicate]; 
    NSError *error; 
    Person *person = [[self.managedObjectContext executeFetchRequest:request error:&error]lastObject]; 
    [person.firstName setValue:contact.firstName forKey:@"fistName"]; 
    [person.lastName setValue:contact.lastName forKey:@"lastName"]; 

    if(![self.managedObjectContext save:&error]){ 

     NSLog(@"Could not save edited data"); 
    } 

} 

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

Я видел ответ how to update core data entered values, и я думаю, что я, конечно, что-то отсутствует

+0

Лицо * человек = [[self.managedObjectContext executeFetchRequest: ошибка запроса: & error] lastObject]; -> check error – vaibby

+0

Ваш код для обновления объекта 'person' кажется неправильным. Почему вы обновляете свойство 'fistName' (sic) свойства' firstName', используя KVC? То же самое для 'lastName'? – Avi

+0

@vaibby error is nil – Rishab

ответ

0

Вам не хватает чего-то, а совсем наоборот

эквивалент основных данных для простой собственности сеттера

person.firstName = contact.firstName 

является

[person setValue:contact.firstName forKey:@"firstName"]; 
[person setValue:contact.lastName forKey:@"lastName"]; 

рассмотреть также опечатка @"fistName"

Edit: Попробуйте этот синтаксис

NSArray *people = [self.managedObjectContext executeFetchRequest:request error:&error]; 
if (error) { 
    NSLog(@"%@", error); 
    return; 
} 
if (people.count) { 
    Person *person = [people lastObject]; 
    person.firstName = contact.firstName; 
    person.lastName = contact.lastName; 

    if(![self.managedObjectContext save:&error]){ 
     NSLog(@"Could not save edited data"); 
    } 
} else { 
    NSLog(@"result array is empty"): 
} 
+0

Оба метода не работают – Rishab

+0

Является ли массив возвращенным из запроса выборки пустым? Просто вызов 'lastObject' на пустом массиве возвращает' nil' – vadian

+0

ya исправил опечатку – Rishab

0

Вместо

[person.firstName setValue:contact.firstName forKey:@"firstName"]; 
[person.lastName setValue:contact.lastName forKey:@"lastName"]; 

использование

[person setValue:contact.firstName forKey:@"firstName"]; 
[person setValue:contact.lastName forKey:@"lastName"]; 

или

person.firstName = contact.firstName; 
person.lastName = contact.lastName; 

Редактировать: предложение перед тем, как вслепую назначить последний объект запроса на выборку для объекта человека и установить значения в основных данных, проверьте, возвращает ли ваш запрос выборки результат или нет. Это может привести к сбою.

NSArray *persons = [[[CoreDataManager sharedManager] context] executeFetchRequest:fetchRequest error:&error]; 

if(persons.count > 0){ 
// do changes in the object 
} 
else{ 
// do what you want to do to handle this situation 
} 
+0

nope ничего не происходит – Rishab

+0

проверить, получаете ли вы сущность человека здесь Person * person = [[self.managedObjectContext executeFetchRequest: ошибка запроса: & error] lastObject]; – Rohit

+0

хорошо это nil. Зачем? Что здесь случилось? – Rishab

Смежные вопросы