gpt4 book ai didi

iphone - 核心数据中的拒绝规则无法正常工作

转载 作者:行者123 更新时间:2023-11-28 17:48:00 27 4
gpt4 key购买 nike

这是我的对象模型:

一个客户可以有多个项目(可选),但一个项目必须只有一个客户(必需)。一个 MemoEntry 只能有一个 Project(可选),同一 Project 可以有不同的 MemoEntry(可选)。

object model

删除时:

  • Client.projects 有一个拒绝规则
  • Project.client 有一个 Nullify 规则
  • Project.memos 有一个拒绝规则
  • MemoEntry.project 有一个无效规则

在各自的 TableViewController 中删除 Client、Project 或 MemoEntry 时调用的代码:

// Delete the managed object.
NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext];
[context deleteObject:[self.fetchedResultsController objectAtIndexPath:indexPath]];

NSError *error;
if (![context save:&error]) {
// Update to handle the error appropriately.
NSLog(@"MyApp - Unresolved error %@, %@", error, [error userInfo]);
exit(-1); // Fail
}

粗体问题:

如果我创建了一个项目,然后删除了它的父客户端,则代码会正确地跟随到 IF 语句中。如果我访问“已删除”的客户端,它仍然存在,我可以编辑 clientName 和其他属性,保存它,一切正常。我可以转到项目并打开项目并查看更新后的客户端 clientName但是当我通过项目访问客户端时,我的应用程序退出了。

我的删除规则设置不正确吗?调用 [context save:&error] 是否保存删除,即使它继续出错?有什么想法吗?

*edit - 断点错误停止的行:

NSEntityDescription *entity = [NSEntityDescription entityForName:@"Client" inManagedObjectContext:passedManagedObjectContext];

抛出的错误:

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '+entityForName: could not locate an NSManagedObjectModel for entity name 'Client''
*** Call stack at first throw:
(
0 CoreFoundation 0x30897ed3 __exceptionPreprocess + 114
1 libobjc.A.dylib 0x3002f811 objc_exception_throw + 24
2 CoreData 0x3162f575 +[NSEntityDescription entityForName:inManagedObjectContext:] + 124
3 EasyMemo 0x00008ebb -[EditingViewController viewWillAppear:] + 1478
4 UIKit 0x31ec4d9b -[UINavigationController _startTransition:fromViewController:toViewController:] + 610
5 UIKit 0x31ec4ac3 -[UINavigationController _startDeferredTransitionIfNeeded] + 182
6 UIKit 0x31ebd21b -[UINavigationController pushViewController:transition:forceImmediate:] + 606
7 UIKit 0x31ebcfb3 -[UINavigationController pushViewController:animated:] + 34
8 EasyMemo 0x000058fd -[DetailProjectViewController tableView:didSelectRowAtIndexPath:] + 368
9 UIKit 0x31f7ae6f -[UITableView _selectRowAtIndexPath:animated:scrollPosition:notifyDelegate:] + 662
10 UIKit 0x31f772af -[UITableView _userSelectRowAtIndexPath:] + 130
11 Foundation 0x349c7e8d __NSFireDelayedPerform + 368
12 CoreFoundation 0x3084e7fb __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 14
13 CoreFoundation 0x3084e2ad __CFRunLoopDoTimer + 860
14 CoreFoundation 0x3081f7a5 __CFRunLoopRun + 1088
15 CoreFoundation 0x3081f277 CFRunLoopRunSpecific + 230
16 CoreFoundation 0x3081f17f CFRunLoopRunInMode + 58
17 GraphicsServices 0x31e445f3 GSEventRunModal + 114
18 GraphicsServices 0x31e4469f GSEventRun + 62
19 UIKit 0x31e51123 -[UIApplication _run] + 402
20 UIKit 0x31e4f12f UIApplicationMain + 670
21 EasyMemo 0x0000259f main + 70
22 EasyMemo 0x00002554 start + 40
)

terminate called after throwing an instance of 'NSException'

最佳答案

NSFetchedResultsController 中包含的被删除对象是什么?

如果 -save: 失败,则不会向持久存储写入任何内容,您的对象也不会被删除。这就是您仍然可以访问它们的原因。

至于“但是当我通过项目访问客户端时,我的应用程序退出了。”

错误是什么?

控制台中报告了什么?

objc_exception_throw 上设置断点并查看真正导致崩溃的原因。

关于iphone - 核心数据中的拒绝规则无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4132801/

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