gpt4 book ai didi

iphone - 托管对象上下文保存失败怎么办?

转载 作者:行者123 更新时间:2023-12-03 19:33:53 25 4
gpt4 key购买 nike

示例:我有一个带有 catAge 属性的 Cat 实体。在数据建模器中,我将 catAge 配置为 int,最大值为 100。然后我执行以下操作:

[newManagedObject setValue:[NSNumber numberWithInt:125] forKey:@"catAge"];

// Save the context.
NSError *error = nil;
if (![context save:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
}

我在控制台中收到错误,如下所示:

2010-06-12 11:40:41.947 CatTest[2250:207] Unresolved error Error Domain=NSCocoaErrorDomain Code=1610 UserInfo=0x10164d0 "Operation could not be completed. (Cocoa error 1610.)", {
NSLocalizedDescription = "Operation could not be completed. (Cocoa error 1610.)";
NSValidationErrorKey = catAge;
NSValidationErrorObject = <NSManagedObject: 0x10099f0> (entity: Cat; id: 0x1006a90 <x-coredata:///Cat/t3BCBC34B-8405-4F16-B591-BE804B6811562> ; data: {
catAge = 125;
catName = "No Name";
});
NSValidationErrorPredicate = SELF <= 100;
NSValidationErrorValue = 125;
}

嗯,所以我遇到了验证错误。但奇怪的是,此后 MOC 似乎被破坏了。如果我只是点击“添加”来添加另一个无效的 Cat 对象并保存它,我会得到以下结果:

2010-06-12 11:45:13.857 CatTest[2250:207] Unresolved error Error Domain=NSCocoaErrorDomain Code=1560 UserInfo=0x1232170 "Operation could not be completed. (Cocoa error 1560.)", {
NSDetailedErrors = (
Error Domain=NSCocoaErrorDomain Code=1610 UserInfo=0x1215f00 "Operation could not be completed. (Cocoa error 1610.)",
Error Domain=NSCocoaErrorDomain Code=1610 UserInfo=0x1209fc0 "Operation could not be completed. (Cocoa error 1610.)"
);
}

现在似乎报告了两个错误。但是:当我现在尝试从 TableView 中删除有效的现有对象(使用基于导航的应用程序中的默认核心数据模板)时,应用程序崩溃了!我在控制台中得到的只是:

2010-06-12 11:47:18.931 CatTest[2250:207] Unresolved error Error Domain=NSCocoaErrorDomain Code=1560 UserInfo=0x123eb30 "Operation could not be completed. (Cocoa error 1560.)", {
NSDetailedErrors = (
Error Domain=NSCocoaErrorDomain Code=1610 UserInfo=0x1217010 "Operation could not be completed. (Cocoa error 1610.)",
Error Domain=NSCocoaErrorDomain Code=1610 UserInfo=0x123ea80 "Operation could not be completed. (Cocoa error 1610.)"
);
}

...所以不知道它在哪里或为什么崩溃,但它确实崩溃了。那么问题是,出现验证错误时需要采取哪些必要步骤?

最佳答案

您遇到的崩溃可能与之前的错误无关,但如果没有相关的源代码,这几乎是不可能判断的。无论如何,为了正确处理您所描述的情况,您有两种选择。您可以向用户报告错误,以便他/她可以修改违反验证检查的违规值,然后保存上下文,或者您必须从上下文中删除 NSManagedObject

总体上有更好的策略。不要让 Core Data 在保存上下文之前自动应用验证(使用自动生成的方法或您自己的方法),而是在采取操作之前自行进行验证测试。使用 NSManagedObject 方法执行此操作

- (BOOL)validateForInsert:(NSError **)error;
- (BOOL)validateForUpdate:(NSError **)error;
- (BOOL)validateForDelete:(NSError **)error;

如果这些方法返回 YES,您可以继续。否则,像以前一样提醒用户并让他/她根据需要修改对象或删除对象。与之前情况的不同之处在于,在这种情况下您尚未保存上下文。仅当前面的方法返回 YES 时才保存上下文,因此您确信保存会成功。

关于iphone - 托管对象上下文保存失败怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3028213/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com