2013-09-27 2 views
6
[newVehicle setValue: _txtFieldVehicleNumber.text forKey:@"number"]; 

[newVehicle setValue: lblFuelType.text forKey:@"fueltype"]; 

[newVehicle setValue: lblFuelUnit.text forKey:@"fuelunit"]; 

[newVehicle setValue: lblDistanceUnit.text forKey:@"distanceunit"]; 

Я хочу обновить свой основной объект данных с именем «Транспортное средство», для этого объекта у меня есть несколько атрибутов, и я хочу обновить некоторые из них, но не все, когда я выбираю конкретный атрибут из лицо. Итак, что мне делать?Как обновить основные данные, введенные значения

+2

Вы получать экземпляр этого объекта из основных данных, обновлять атрибуты, которые вы хотите сохранить основной контекст данных. –

ответ

17

вы можете сделать следующее (примерный код: выполнить обработку ошибок и синтаксис проверки).

NSFetchRequest *fetchRequest=[NSFetchRequest fetchRequestWithEntityName:@"Vehicle"]; 
NSPredicate *predicate=[NSPredicate predicateWithFormat:@"vehicle_id==%@",vehicle_id]; // If required to fetch specific vehicle 
fetchRequest.predicate=predicate; 
Vehicle *newVehicle=[[self.managedObjectContext executeFetchRequest:fetchRequest error:nil] lastObject]; 

[newVehicle setValue: _txtFieldVehicleNumber.text forKey:@"number"]; 

[newVehicle setValue: lblFuelType.text forKey:@"fueltype"]; 

[newVehicle setValue: lblFuelUnit.text forKey:@"fuelunit"]; 

[newVehicle setValue: lblDistanceUnit.text forKey:@"distanceunit"]; 

[self.managedObjectContext save:nil] 
+3

Не могли бы вы объяснить, что это за линия: Автомобиль * newVehicle = [[self.managedObjectContext executeFetchRequest: fetchRequest error: nil] lastObject]; –

+0

Вышеприведенная строка извлекает все объекты, которые существуют в вашем хранилище основных данных и которая удовлетворяет критериям, указанным fetchRequest (если предикат равен нулю, тогда он извлекает все записи, принадлежащие этому объекту). Поскольку executeFetchRequest возвращает массив, даже если только один объект удовлетворяет критериям, нам нужно сделать lastObject. – Max

+0

У меня есть тысяча записей, и, очевидно, мне нужно использовать цикл for для обновления всех записей. Но этот метод занимает почти 5 минут! Какие-либо предложения? – user3687

3

Получить объект из основных данных:

VVdAppDelegate *delegate = (VVdAppDelegate *)[[UIApplication sharedApplication] delegate]; 
NSManagedObjectContext *managedObjectContext = [delegate managedObjectContext]; 
NSEntityDescription *entityDescriptionDelegate = [NSEntityDescription entityForName:@"entityName" inManagedObjectContext:managedObjectContext]; 
NSFetchRequest *requestData = [[NSFetchRequest alloc] init]; 
[requestData setEntity:entityDescriptionDelegate]; 
NSError *error; 

Если есть больше, чем NSManagedObject

NSArray *objectsArray = [managedObjectContext executeFetchRequest:requestData error:&error]; 

for (NSManagedObject *object in objectsArray) { 

     // Here update values of every object 

} 

// And save values to core data 
[managedObjectContext save:&error]; 
Смежные вопросы