Iphone 无法将对象转换为故障(核心数据)

Iphone 无法将对象转换为故障(核心数据),iphone,ios,core-data,fault,Iphone,Ios,Core Data,Fault,我试图用下面的代码将对象转化为错误,但失败了 User.m @implementation User ... -(void)memoryWarningHandle{ if (![self.avatar isFault]) { [self.managedObjectContext refreshObject:self.avatar mergeChanges:NO]; if ([self.avatar isFault]) { NSLo

我试图用下面的代码将对象转化为错误,但失败了

User.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*)对象合并更改:(BOOL)将参数对象标记为托管对象。旗A 布尔值
若标志为“否”,那个么对象将变成一个故障,并且任何挂起的 更改丢失。在访问该对象之前,该对象一直是一个故障 同样,此时它的属性值将从 存储或上次缓存状态

如果标志为“是”,则对象的属性值将从 存储区或上次缓存状态中的值,然后是 (在本地上下文中)重新应用于那些(现在是新的) 更新)值。(如果标志为“是”,则将值合并到对象中 在这种情况下,我们将永远成功,因此不存在 “合并冲突”或不可能的合并。)

avatar
必须在
[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>
2013-05-23 11:58:30.072 myApp[10967:907]self.avatar:
2013-05-23 11:58:30.947 myApp[10967:907]self.managedObjectContext:

UIImage
不是
NSManagedObject
的子类,您无法刷新它,它也不会响应
isFault

在任何情况下,都不能对
NSManagedObject
上的特定属性进行故障诊断,必须对整个对象进行故障诊断。

请尝试
[[self-managedObjectContext]刷新对象:自我合并更改:否]
对整个对象进行故障诊断。

如果您只想对图片数据进行故障诊断,请将一对一关系(例如
imageContainer
)添加到属性(例如
imageData
)中包含图像数据的实体,然后在对象上刷新该关系,如下所示:

[[self managedObjectContext] refreshObject:self.imageContainer mergeChanges:NO]

您的代码中应该有一个异常,例如:
发送到实例的未识别选择器…

您可以记录
self.managedObjectContext
self.avatar
?它们是零吗?@DanShelly如果(![self.avatar isFault])这里告诉self.avatar不是错的,我将在后面记录它们:)这并不意味着它不是零。尝试
[nil isFault]
您将获得
@DanShelly我已经更新了帖子,请检查。您是否在某处实现了邮件转发或
值取消定义键
?似乎没有。我的意思是在[self.managedObjectContext refreshObject:self.avatar mergeChanges:no]中没有例外;您应该得到
[self.avatar isFault]