2012-01-03 71 views
1

我正在学习核心数据 如何使用核心数据删除和更新数据。我曾经在上传和获取。我需要编写删除和更新的方法。请告诉我如何使用核心数据更新和删除重新编码。如何使用核心数据更新和删除需要记录的表格

下面我编写了使用核心数据从表中上载和提取数据的代码。

for (NSManagedObject *managedObject in items) { 
    [self.managedObjectContext deleteObject:managedObject]; 
    DebugLog(@"%@ object deleted",entityDescription); 
} 
if (![self.managedObjectContext save:&error]) { 
    DebugLog(@"Error deleting %@ - error:%@",entityDescription,error); 
} 

更新以类似的方式进行,取对象需要,更改:

-(void)uploadData 
{ 
    Employee *empObj=(Employee *)[NSEntityDescription insertNewObjectForEntityForName:@"Employee" inManagedObjectContext:self.managedObjectContext]; 


    empObj.empId=[NSNumber numberWithInt:12345]; 
    empObj.empSalary=[NSNumber numberWithInt:25000]; 

    [email protected]"Venu"; 
    [email protected]"Programmer"; 
    [email protected]"2 Years"; 

    if ([self.managedObjectContext hasChanges]) 
    { 
     [self.managedObjectContext save:nil]; 
    } 

} 
-(void)fetchData 
{ 
    NSEntityDescription *empEntity = [NSEntityDescription entityForName:@"Employee" inManagedObjectContext:self.managedObjectContext]; 

    // Setup the fetch request 
    NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
    [request setEntity:entity]; 

    NSArray *fatherArray=[self.managedObjectContext executeFetchRequest:request error:nil]; 

    [request setEntity:empEntity]; 

    NSArray *empArray=[self.managedObjectContext executeFetchRequest:request error:nil]; 

    for (int i=0; i<[empArray count]; i++) 
    { 
     printf("\n=================================Recored== %d==================================== ",i); 

     Employee *empObj=[empArray objectAtIndex:i]; 
     printf("\n obj.empName========= %s",[empObj.empName UTF8String]); 
     printf("\n obj.empDesignation========= %s",[empObj.empDesignation UTF8String]); 
     printf("\n obj.empExp========= %s",[empObj.empExp UTF8String]); 
     printf("\n obj.empId========= %d",[empObj.empId intValue]); 
     printf("\n obj.empSalary========= %d",[empObj.empSalary intValue]); 
     printf("\n============================================================================= "); 

    } 
} 

回答

4

我正在做一个涉及核心数据的项目,我想 想分享一些关于它的东西。

很明显,在删除或更新记录之前,您需要 来检索该记录。

使用与EMPID 12345员工为例,

一)删除

NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
NSEntityDescription *entity = [NSEntityDescription entityForName:@:@"Employee"             
              inManagedObjectContext:self.managedObjectContext]; 
[request setEntity:entity]; 


NSPredicate *pred = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"empId = %d", 12345]]; 
[request setPredicate:pred]; 


NSArray *empArray=[self.managedObjectContext executeFetchRequest:request error:nil]; 
[request release]; 

if ([empArray count] > 0){ 
    Employee *employee = [empArray objectAtIndex:0]; 
    [self.managedObjectContext deleteObject:employee]; 
    [self.managedObjectContext save:nil]; 
} 

二)更新

NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
NSEntityDescription *entity = [NSEntityDescription entityForName:@:@"Employee"  
              inManagedObjectContext:self.managedObjectContext]; 
[request setEntity:entity]; 

NSPredicate *pred = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"empId = %d", 12345]]; 
[request setPredicate:pred]; 

NSArray *empArray=[self.managedObjectContext executeFetchRequest:request error:nil]; 
[request release]; 

if ([empArray count] > 0){ 
    Employee *employee = [empArray objectAtIndex:0]; 

    employee.empSalary=[NSNumber numberWithInt:45000]; 

    [email protected]"John"; 
    [email protected]"Analysist"; 
    [email protected]"4 Years"; 

    [self.managedObjectContext save:nil]; 
} 
+1

这里会发生什么?是否足够聪明地保存“更改记录”或更新empArray中的所有项目? – frankish 2014-07-03 20:20:13

0

成功获取请求后,你可以简单地询问被管理的ObjectContext删除它们删除对象值,并保存上下文。

相关问题