核心数据关系导致保存错误后删除
-
13-09-2019 - |
题
此问题可能是一个长镜头。当我保存我删除实体后,我想不通,我让我的核心数据项目的错误。
我有,我有,一身打扮工作的两个主要实体,和文章。我可以毫无问题创建它们,但是当我删除它们,我得到了如下错误日志:
有关的成套装备:
2009-09-22 20:17:37.771 itryiton[29027:20b] Operation could not be completed. (Cocoa error 1600.)
2009-09-22 20:17:37.773 itryiton[29027:20b] {
NSLocalizedDescription = "Operation could not be completed. (Cocoa error 1600.)";
NSValidationErrorKey = outfitArticleViewProperties;
NSValidationErrorObject = <Article: 0x12aa3c0> (entity: Article; id: 0x12b49a0 <x-coredata://7046DA47-FCE1-4E21-8D7B-E532AAC0CC46/Article/p1> ; data: {
articleID = 2009-09-22 19:05:19 -0400;
articleImage = 0x12b4de0 <x-coredata://7046DA47-FCE1-4E21-8D7B-E532AAC0CC46/ArticleImage/p1>;
articleType = nil;
attributeTitles = "(...not nil..)";
color = nil;
comment = nil;
dateCreated = 2009-09-22 19:05:19 -0400;
designer = nil;
imageView = "(...not nil..)";
location = "(...not nil..)";
outfitArticleViewProperties = (
0x12b50f0 <x-coredata://7046DA47-FCE1-4E21-8D7B-E532AAC0CC46/OutfitArticleViewProperties/p1>
);
ownesOrWants = 0;
pattern = nil;
price = nil;
retailer = nil;
thumbnail = "(...not nil..)";
washRequirements = nil;
wearableSeasons = nil;
});
NSValidationErrorValue = {(
<OutfitArticleViewProperties: 0x1215340> (entity: OutfitArticleViewProperties; id: 0x12b50f0 <x-coredata://7046DA47-FCE1-4E21-8D7B-E532AAC0CC46/OutfitArticleViewProperties/p1> ; data: {
article = 0x12b49a0 <x-coredata://7046DA47-FCE1-4E21-8D7B-E532AAC0CC46/Article/p1>;
articleViewPropertiesID = nil;
outfit = nil;
touch = nil;
view = "(...not nil..)";
})
)};
}
如果我删除文章,我得到:
2009-09-22 18:58:38.591 itryiton[28655:20b] Operation could not be completed. (Cocoa error 1560.)
2009-09-22 18:58:38.593 itryiton[28655:20b] DetailedError: {
NSLocalizedDescription = "Operation could not be completed. (Cocoa error 1600.)";
NSValidationErrorKey = articleImage;
NSValidationErrorObject = <Article: 0x12aa340> (entity: Article; id: 0x12b3f10 <x-coredata://05340FA6-B5DC-4646-A5B4-745C828C73C3/Article/p1> ; data: {
articleID = 2009-09-22 18:58:26 -0400;
articleImage = 0x12b4d00 <x-coredata://05340FA6-B5DC-4646-A5B4-745C828C73C3/ArticleImage/p1>;
articleType = nil;
attributeTitles = "(...not nil..)";
color = nil;
comment = nil;
dateCreated = 2009-09-22 18:58:26 -0400;
designer = nil;
imageView = "(...not nil..)";
location = "(...not nil..)";
outfitArticleViewProperties = (
0x12b5010 <x-coredata://05340FA6-B5DC-4646-A5B4-745C828C73C3/OutfitArticleViewProperties/p1>
);
ownesOrWants = 0;
pattern = nil;
price = nil;
retailer = nil;
thumbnail = "(...not nil..)";
washRequirements = nil;
wearableSeasons = nil;
});
NSValidationErrorValue = <ArticleImage: 0x12ad600> (entity: ArticleImage; id: 0x12b4d00 <x-coredata://05340FA6-B5DC-4646-A5B4-745C828C73C3/ArticleImage/p1> ; data: {
article = 0x12b3f10 <x-coredata://05340FA6-B5DC-4646-A5B4-745C828C73C3/Article/p1>;
image = "(...not nil..)";
});
}
一个1600的错误是:
NSValidationRelationshipDeniedDeleteError结果 错误代码来表示某种关系点击 与删除规则NSDeleteRuleDeny是点击 非空。
可用在Mac OS X v10.4和更高版本。
声明在CoreDataErrors.h。
但我不能看到我的生活,其关系将是防止删除。如果某些核心数据向导可以看到我的方式错误,我会很感激。
我无法庆祝这一解决,因为我并没有真正解决这个问题,但我有一个工作变通。在.m
每个我的managedObjects
的我添加看起来像一个方法:
-(void) deleteFromManangedObjectContext{
self.outfit = nil;
self.article = nil;
[[self managedObjectContext] deleteObject:self];
}
所以你可以看到,首先,我手动零了关系,然后我有对象删除自身。在其他的对象,而不是nil-ing
,我的删除方法被调用一些对象的关系,得到一个级联。
解决方案 3
我无法庆祝这一解决,因为我并没有真正解决这个问题,但我有一个工作变通。在.M为每个我的managedObjects的我添加看起来像一个方法:
-(void) deleteFromManangedObjectContext{
self.outfit = nil;
self.article = nil;
[[self managedObjectContext] deleteObject:self];
}
所以你可以看到,首先,我手动零了关系,然后我有对象删除自身。在其他的对象,而不是零-ING,我的删除方法被调用一些对象的关系,得到一个级联。
我仍然有兴趣在“正确”的答案。但是,这是我的最佳解决方案,并且它允许在我的关系如何删除了一些细粒度控制。
其他提示
我刚刚删除的故障问题,并降落在这个问题上。我也想通了,我的问题,并认为我会分享,太多,也许会有人有同样的问题也是如此。
我犯的错误是,(A)我试图删除该对象具有到另一个对象(B)与作为NULL删除规则的关系。然而,对象B也可以选择将的关系,它是不可选的。因此,当我删除了A,B的A的关系变得空这是不允许的。当我更改删除规则级联和它的工作。
你碰巧实现一些存取到关系自己? 我曾经有像
的码-(NSSet*)articles
{
re-calculates properties....
return [self primitiveValueForKey:@"articles"];
}
在NSManagedObject的子类,有保存错误。 当时的情况是,当这个对象从ManagedObjectContext删除,CoreData调用存取“文章”,以应对删除传播。删除传播,在我的情况下,这将重新surrected的作废“物品”过程中出现的文章此重新计算。
检查xcdatamodel
文件的Deny
删除规则。直到你找到它,点击每个关系。你需要改变这种规则或调整你如何删除管理对象预见规则的应用程序之间的关系。
我有类似的问题,其中它原来的问题是在的.xib文件。当我的复选框切换为“删除上删除对象”的相关阵列控制器的(Bindings->内容设置下),问题消失。
不知道这是否会在你的情况有所帮助,但我已经有很多头发变灰了横空出世被藏起来的地方Interface Builder的内部问题。
在我的情况下,我自己合法创建的自定义方法在我NSManagedObject的亚类:请将isDeleted。我遇到了奇怪的保存例外,直到我删除/重命名它。 失去了我的理智后,我再次阅读文档更通充分这段时间。 原来,我重写的NSManagedObject方法之一必须不覆盖一个。
检查是否从文档此摘录可以帮助你:
方法,你一定不能覆盖
NSManagedObject本身定制NSObject的许多特征,使得 管理对象可适当集成到核心数据 基础设施。 核心数据依赖于NSManagedObject的实现 下面的方法,哪你因此,绝对不得 重写:强> primitiveValueForKey :, setPrimitiveValue:forKey :, :,的isEqual哈希,父类,类,自我,isProxy,isKindOfClass :, isMemberOfClass :, conformsToProtocol :, respondsToSelector:, managedObjectContext,实体的objectID,isInserted,isUpdated, 的请将isDeleted ,然后示例的isFault,分配,allocWithZone :,新,instancesRespondToSelector :, instanceMethodForSelector :, methodForSelector :, methodSignatureForSelector :, instanceMethodSignatureForSelector :,或isSubclassOfClass:
此外 - 还有其它方法可以覆盖,但你必须调用超级实现象,或致电:willAccessPrimitiveForKey, didAccessPrimitiveForKey
在存取和willChangevalueForKey, didChangeValueForKey
的制定者......
最近我遇到了这个错误,因为我已经在代码 - (无效)willSave这之后更新了一些删除管理对象的属性的方法 - (BOOL)已经请将isDeleted返回真
我通过固定它:
- (void)willSave {
if (![self isDeleted]) {
//Do stuff...
}
}
我遇到与级联删除一个非常类似的问题,在非可选的父子关系。这是非常令人困惑,因为我认为家长关系删除规则设置为级联。事实证明,在Xcode的数据模型编辑器并没有保存删除规则。我将它设置为层叠,去不同的意见,回来将它设置为再次抵消。我不得不重新启动Xcode和设置删除规则级联。我没有在这之后一切正常。
因此,如果其他人遇到这个问题仔细检查Xcode是钻研更复杂的解决方案之前,保存删除规则。
这是我使用的是iOS上在Xcode 5的数据模型编辑器的核心数据的方式。