我正在尝试使用以下代码将对象转换为故障,但失败了。
用户.m
@implementation User
...
-(void)memoryWarningHandle{
if (![self.avatar isFault]) {
[self.managedObjectContext refreshObject:self.avatar mergeChanges:NO];
if ([self.avatar isFault]) {
NSLog(@"isFault");
// Never went into here
}
}
}
...
这User
是一个实体,avatar
是 的一个属性User
。
正如苹果文档中所说:
refreshObject:mergeChanges:更新托管对象的持久属性以使用持久存储中的最新值。
- (void)refreshObject:(NSManagedObject *)object mergeChanges:(BOOL)flag 参数 object 一个托管对象。flag 一个布尔值。
如果 flag 为 NO,则对象将变为故障,并且任何未决更改都将丢失。该对象在再次访问之前一直是错误的,此时它的属性值将从存储或上次缓存状态重新加载。
如果 flag 为 YES,则对象的属性值从存储中的值或上次缓存状态中重新加载,然后(在本地上下文中)所做的任何更改都将重新应用于那些(现在新更新的)值。(如果 flag 为 YES,则将值合并到 object 将始终成功 - 在这种情况下,因此不存在“合并冲突”或不可能的合并之类的事情。)
avatar
must be fault after被[self.managedObjectContext refreshObject:self.avatar mergeChanges:NO];
调用,但不是。这里发生了什么?任何帮助将不胜感激!
编辑 1 我测试代码如下:
-(void)memoryWarningHandle{
self.avatar = [UIImage imageNamed:@"avatar.png"];
NSLog(@"self.avatar :%@",self.avatar);
NSLog(@"self.managedObjectContext :%@",self.managedObjectContext);
if (![self.avatar isFault]) {
[self.managedObjectContext refreshObject:self.avatar mergeChanges:NO];
if ([self.avatar isFault]) {
NSLog(@"isFault");
// Never went into here
}
}
}
NSLog 结果:
2013-05-23 11:58:30.072 myApp[10967:907] self.avatar :<UIImage: 0x1d5f6e20>
2013-05-23 11:58:30.947 myApp[10967:907] self.managedObjectContext :<NSManagedObjectContext: 0x1e898c10>