2013-09-27 19 views
6
Ben birkaç davranışının olması varlık için "Araç" adlı benim çekirdek veri varlık, güncelleştirmek istediğiniz
[newVehicle setValue: _txtFieldVehicleNumber.text forKey:@"number"]; 

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

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

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

ve bazıları güncellemek istiyorum ama hepsi değil ben özellikle niteliğini seçtiğinizde varlık Peki ne yapmalıyım?çekirdek veri güncelleme nasıl girilen değerler

+2

fazla varsa, istediğiniz özellikleri güncellemek çekirdek veri bağlamını kaydetmek. –

cevap

17

Aşağıdakileri yapabilirsiniz (yaklaşık kod. Hata işleme gerçekleştirme ve sözdizimini kontrol etme).

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

Bu satırın ne anlama geldiğini açıklayabilir misiniz? Araç * newVehicle = [[self.managedObjectContext executeFetchRequest: fetchRequest error: nil] lastObject]; –

+0

Yukarıdaki satır, temel veri deponuzda bulunan ve fetchRequest tarafından belirtilen ölçütleri karşılayan tüm nesneleri getirir (eğer yükleme geçerli değilse, o zaman bu varlığa ait tüm kayıtları getirir). ExecuteFetchRequest, yalnızca bir nesne ölçütleri karşılasa bile bir dizi döndürdüğünden, lastObject yapmamız gerekir. – Max

+0

Binlerce kayıt var ve açıkçası tüm kayıtları güncellemek için bir for döngüsü kullanmam gerekiyor. Ama bu yöntem neredeyse 5 dakika kadar sürer! Baska öneri? – user3687

3

çekirdek verilerinden bir varlık alın:

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; 

Sen Çekirdek Verilerden o varlığın örneği getirme bir 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]; 
İlgili konular