gpt4 book ai didi

iphone - Core Data Cocoa 错误 1570。无法保存多个实体对象

转载 作者:太空狗 更新时间:2023-10-30 04:00:09 24 4
gpt4 key购买 nike

我有一个具有以下接口(interface)的 NSManagedObject。

@class Organization, Person;

@interface Assistance : NSManagedObject
@property (nonatomic, retain) NSDate * date;
@property (nonatomic, retain) Organization *organization; // Not optional, 1 to 1
@property (nonatomic, retain) NSSet *persons; // 1 to many
@end

Person 与 Organization 具有 1-1 关系。Assistance 与 Organization 和 Person 是 1-may 关系。

我第一次尝试保存条目时效果很好,但第二次就不行了。

案例场景:我添加了一个日期为 2013-07-26 00:00:00 +0000 的实体、其各自的组织和人员。

我重新启动应用程序。它搜索当前日期 (7/27),但没有找到任何内容。我开始在应用程序上编辑内容,因此它使用 MagicalRecord 的便捷方法 [Assistance createEntity] 创建了一个新实体;我立即确定日期(7 月 27 日)和组织。添加或删除 Person 对象。选择另一个日期后,我尝试保存当前的援助对象实体,为此,我自己实现了setCurrentdate方法:

- (void)setCurrentDate:(NSDate *)currentDate
{
if (assistanceWasChanged) {
NSLog(@"> > > Has changed, need to save with Persons {%i}, org {%@}, date {%@}", [self.assistance.persons count], self.organization.name, self.currentDate);
// [[NSManagedObjectContext defaultContext] saveOnlySelfWithCompletion:^(BOOL success, NSError *error) { NSLog(@"> > > 01:Assistance saved?"); }];
[[NSManagedObjectContext defaultContext] saveOnlySelfAndWait];
}
assistanceWasChanged = NO;
_currentDate = currentDate;
[self setCurrentAssistance]; // Tries to find Assistance with new date
}

但这一次,它不会保存。我收到 Cocoa 错误 1570(并非所有必填字段都已填写):

> > > Has changed, need to save with Persons {1}, org {MSF}, date {2013-07-27 00:00:00 +0000}
2013-07-27 20:23:41.017 -[NSManagedObjectContext(MagicalSaves) MR_saveWithOptions:completion:](0x8d61e50) → Saving <NSManagedObjectContext (0x8d61e50): *** DEFAULT ***> on *** MAIN THREAD ***
2013-07-27 20:23:41.018 -[NSManagedObjectContext(MagicalSaves) MR_saveWithOptions:completion:](0x8d61e50) → Save Parents? 0
2013-07-27 20:23:41.018 -[NSManagedObjectContext(MagicalSaves) MR_saveWithOptions:completion:](0x8d61e50) → Save Synchronously? 1
2013-07-27 20:23:41.018 -[NSManagedObjectContext(MagicalRecord) MR_contextWillSave:](0x8d61e50) Context DEFAULT is about to save. Obtaining permanent IDs for new 1 inserted objects
2013-07-27 20:23:41.019 CoreData: sql: BEGIN EXCLUSIVE
2013-07-27 20:23:41.019 CoreData: sql: SELECT Z_MAX FROM Z_PRIMARYKEY WHERE Z_ENT = ?
CoreData: sql: UPDATE Z_PRIMARYKEY SET Z_MAX = ? WHERE Z_ENT = ? AND Z_MAX = ?
2013-07-27 20:23:41.020 CoreData: sql: COMMIT
2013-07-27 20:23:41.021 +[MagicalRecord(ErrorHandling) defaultErrorHandler:](0x6b3a0) Error: <Assistance: 0x9cb16c0> (entity: Assistance; id: 0x9e5ac00 <x-coredata://15A3-4C6D-4025-9131-3D51048/Assistance/p1> ; data: {
date = "2013-07-26 00:00:00 +0000";
organization = nil;
persons = "<relationship fault: 0x8d80500 'persons'>";
})

组织在任何时候都不是零。此外,从未获取/编辑过日期为“2013-07-26”的对象。正如我的日志语句所示,我尝试添加的新对象的日期为“2013-07-27”。起初我以为 CoreData 有一个指向旧数据的指针,但事实并非如此,第一次插入的日期从未被获取。 (当我重新启动应用程序时,第一个对象 (7/26) 仍然存在。如果有所不同,Assistance 实体对象是我的实现文件中的一个属性:

@property (strong, nonatomic) Assistance *assistance;

我是否遗漏了有关 Core Data 的某些信息?为什么保存一个新的实体对象时访问的是最先插入的对象?为什么组织为零?

最佳答案

看起来您没有创建新的组织。相反,您将新的 Assistance 对象链接到现有的 organisation。因为关系是 1 对 1,这意味着旧的 Assistance 对象与 organization 的关系已中断。这是由 Core Data 自动完成的,以维护您设置的配置的完整性。

因此,要么创建一个新的 organisation 对象,要么改变关系的多样性。

关于iphone - Core Data Cocoa 错误 1570。无法保存多个实体对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17904971/

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