我处于需要更新核心数据中实体中的可转换属性的情况,直到现在我已经尝试了谷歌和堆栈溢出的所有可能答案,但没有取得任何成果。
这是我在核心数据中保存对象的方法,我保存的对象是 NSMutablDictionary 类型的对象。
-(void)didSaveToCoreData :(NSMutableDictionary *)newDict
{
@try {
AppDelegate *appDelegate = [[UIApplication sharedApplication]delegate];
NSManagedObjectContext *context = appDelegate.managedObjectContext ;
DataModelSupport *entity = [NSEntityDescription insertNewObjectForEntityForName:@"CPIEntity" inManagedObjectContext:context];
if (newDict != nil) {
[entity.fixed_Model removeAllObjects];
entity.fixed_Model = newDict;
}
NSError *error ;
[context save:&error];
if(error)
{
NSLog(@"Error in Saving Data");
}
else
{
[self didFetchFromCoreDataModel];
NSLog(@"Successfully saved");
}
}
@catch (NSException *exception) {
[self spareMeFromTheCrash:exception];
}
@finally {
}
}
在此方法中,我第一次保存了 19 个键/值的字典对象,并且我在 didFetchFromCoreDataModel 方法中正确获取它,但是当我刷新数据并获取 18 个键/值的字典时,我将该字典保存在核心数据中使用相同的方法 didSaveToCoreData 并以相同的方式从 didFetchFromCoreDataModel 获取它,但它仍然显示 19 个键/值
DataModelSupport 是 NSManagedObject 的子类。在 DataModelSupport.h 中:
@property (nonatomic,weak) NSMutableDictionary *fixed_Model;
在 DataModelSupport.m 中:
@dynamic fixed_Model;
这就是 DataModelSupport 类。
现在在这个方法中,我正在获取相同的对象形式的核心数据
-(void)didFetchFromCoreDataModel
{
@try {
AppDelegate *appDelegate = [[UIApplication sharedApplication]delegate];
NSManagedObjectContext *context = appDelegate.managedObjectContext ;
NSEntityDescription *entity = [NSEntityDescription entityForName:@"CPIEntity" inManagedObjectContext:context];
NSFetchRequest *request = [[NSFetchRequest alloc]init];
[request setReturnsDistinctResults:YES];
[request setReturnsObjectsAsFaults:NO];
[request setResultType:NSDictionaryResultType];
[request setEntity:entity];
NSError *error ;
NSArray *arr = [context executeFetchRequest:request error:&error];
updatedfinalArr = [arr valueForKey:@"fixed_Model"];
if(error)
{
NSLog(@"Error");
}
else
{
}
}
@catch (NSException *exception) {
[self spareMeFromTheCrash:exception];
}
@finally {
}
}
任何帮助表示赞赏。
编辑
我现在在 didSaveToCoreData 方法中对我的代码进行了一些更改,我正在使用这行代码按名称获取实体
NSEntityDescription *descriptor = [NSEntityDescription entityForName:@"CPIEntity" inManagedObjectContext:context];
这样,我每次调用 didSaveToCoreData 方法时都不会创建新实体。
这就是我保存 NSMutlableDictionary 对象的方式
DataModelSupport *entity = [[DataModelSupport alloc]initWithEntity:descriptor insertIntoManagedObjectContext:context];
[entity.fixed_Model removeAllObjects]
entity.fixed_Model = newDict;
但我仍然没有得到正确的结果。现在,当我使用 EDIT 部分中解释的上述过程刷新数据并保存它并获取它时,我得到了更新的数据,但它增加了对象的数量,就像我第一次尝试获取时我在数组中得到了 1 个对象,并且在第二次尝试时,我得到了 2 个对象,它是这样的,所以当添加新数据时,它不会更新它,而是将它添加到实体的 fixed_Model 属性中并增加对象的数量。
最后,现在我正在使用这行代码从 didFetchFromCoreDataModel 方法中的数组中获取最后一个和更新对象
NSDictionary *ddd = [[arr valueForKey:@"fixed_Model"]lastObject];
updatedfinalArr = [NSMutableArray arrayWithObject:ddd];