我有一个实体 ( TestEntity
),其中包含一个包含对象 ( MyObjectClass
) 的“可转换”属性。在初始加载时,可转换的保存正确;初始化如下:
TestEntity *test = (TestEntity *)[NSEntityDescription insertNewObjectForEntityForName:ENTITY[<Int>] inManagedObjectContext:temporaryContext];
test.transformableAttr = [[MyObjectClass alloc] initWithObject:obj];
但是,当我获取一个对象(我使用 NSDictionaryResultType 作为字典获取)并更新它的“Transformable”属性时,
MyObjectClass *my_obj = ....
dict[@"transformableAttr"] = my_obj
它成功保存,但是当我再次获取它时,我得到nil
了“可转换”属性。
现在这只发生在“NSBatchUpdateRequest”,因为当我使用 MOC 保存时
TestEntity *test = ....
test.transformableAttr = updated_object
它保存成功,我可以在再次获取时访问更新的属性。
谁能解释一下?这是否意味着 NSBatchUpdateRequest 不可转换?
我的 NSBatchUpdateRequest 代码:
[context performBlock:^{
NSError *requestError = nil;
NSBatchUpdateRequest *batchRequest = [NSBatchUpdateRequest batchUpdateRequestWithEntityName:entity];
batchRequest.resultType = NSUpdatedObjectIDsResultType;
batchRequest.propertiesToUpdate = properties;
NSBatchUpdateResult *result = nil;
SET_IF_NOT_NIL(batchRequest.predicate, predicate)
@try {
result = (NSBatchUpdateResult *)[context executeRequest:batchRequest error:&requestError];
if (requestError != nil){
// @throw
}
if ([result.result respondsToSelector:@selector(count)]){
__block NSInteger counter = [result.result count];
if (counter > 0){
[managedObjectContext performBlock:^{
for(NSManagedObjectID *objectID in result.result){
NSError *faultError = nil;
NSManagedObject *object = [managedObjectContext existingObjectWithID:objectID error:&faultError];
if (object && faultError == nil) {
[managedObjectContext refreshObject:object mergeChanges:YES];
}
counter--;
if (counter <= 0) {
// complete
}
else{
// Wait.
}
}
}];
}
else{
// No Changes
}
}
else {
// No Changes
}
}
@catch (NSException *exception) {
@throw;
}
}];