2

也许有人可以告诉我我是否走对了。

我有两个实体:

使用以下属性进行 练习:标题 - 字符串练习 ID - 整数

添加了具有以下属性的 Exercise : count - intadded_exercise_id - int

AdditionalExercise 有一个名为link_exercise的提取属性,目标为:Exercise 和谓词:exercise_id == $FETCH_SOURCE.added_exercise_id

在我的代码中,我执行以下操作:

for(AddedExercise *e in listOfAddedEx){
            [moc refreshObject:e mergeChanges:YES];
            NSLog(@"%@", e.link_exercise);
        }

日志说:

() 的关系错误,名称 link_exercise,isOptional 1,isTransient 1,实体 AdditionalExercise,renamingIdentifier link_exercise,验证谓词 (),警告 (),versionHashModifier (null) userInfo {},fetchRequest(实体:练习;谓词:(exercise_id == $FETCH_SOURCE.added_exercise_id); sortDescriptors: ((null)); type: NSManagedObjectResultType; ) 在 0x1700d8b80

所以似乎有什么东西存在,以故障为代表。但如果我尝试访问“link_exercise”数组。例如: e.link_exercise.counte.link_exercise.lastObject

我会收到以下错误:

'NSUnknownKeyException',原因:'[<_NSCoreDataTaggedObjectID 0xd000000000040002> valueForUndefinedKey:]:此类与键 added_exercise_id 的键值编码不兼容。

也许有人知道如何解决这个问题。

提前谢谢了。

SR

----->更新1:

我现在将谓词更改为: SELF.exercise_id=exercise_id

现在我可以访问练习对象,但我得到了错误的 ID,因为

SELF.exercise_id=exercise_id应该看起来像SELF.exercise_id= added_exercise_id

使用谓词SELF.exercise_id= added_exercise_id我得到以下错误:

'NSInvalidArgumentException',原因:'无法为谓词(exercise_id == added_exercise_id)生成 SQL(RHS 上的问题)'

----->更新2:

仍然无法弄清楚为什么它不起作用......

对我来说似乎

SELF.exercise_id == $FETCH_SOURCE.added_exercise_id

应该是正确的谓词,但它不起作用。也许其他人有一些建议......?

或者我应该自己创建一个获取请求(以编程方式)?这意味着为所有“Exercise”设置一个获取请求,并在exercise_id = added_exercise_id 处返回一个。这基本上就是我目前试图通过获取的属性来解决的问题。

-----> 更新 3: 好的,我几乎拥有它!我忘了提到的一件事是,我使用了一个多 managedObjectContext 核心数据堆栈(包括一个 worker-,main-master-context)

masterContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
masterContext.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy;
[masterContext setPersistentStoreCoordinator: coordinator];

mainContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
mainContext.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy;
mainContext.parentContext = masterContext;

workerContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
workerContext.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy;
workerContext.parentContext = mainContext;

我所有的请求都转到工作上下文(在这种情况下,获取的正确内容不起作用)但是如果我的所有请求都转到主上下文,则获取的属性按预期工作!

所以它似乎只适用于具有持久存储的 managedObjectContext 。

有人可以解释一下,为什么这不能与其他 managedObjectContext 一起使用?

4

0 回答 0