iOS 7核心数据 - Fetched Property返回故障数组

时间:2014-04-22 22:49:50

标签: core-data ios7 fetched-property

也许有人可以告诉我,如果我是在正确的方式。

我有两个实体:

使用以下属性

练习 title - string ; exercise_id - int

AddedExercise ,包含以下属性: count - int ; added_exercise_id - int

AddedExercise 有一个名为 link_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,entity AddedExercise,renamingIdentifier link_exercise,验证谓词( ),警告( ),versionHashModifier(null)  用户信息 { },fetchRequest(entity:Exercise; predicate:(exercise_id == $ FETCH_SOURCE.added_exercise_id); sortDescriptors:((null)); type:NSManagedObjectResultType;)on 0x1700d8b80

所以似乎存在某种东西,表现在一个错误中。 但是,如果我尝试访问" link_exercise"阵列。例如: e.link_exercise.count e.link_exercise.lastObject

我会收到以下错误:

' NSUnknownKeyException',原因:' [< _NSCoreDataTaggedObjectID 0xd000000000040002> valueForUndefinedKey:]:此类与key_exercise_id键不符合键值编码。'

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

非常感谢提前。

S.R。

----->更新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',原因:'无法为谓词生成SQL(exercise_id == added_exercise_id)(RHS问题)'

----->更新2:

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

对我来说似乎是

SELF.exercise_id == $FETCH_SOURCE.added_exercise_id

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

或者我应该自己创建一个获取请求(以编程方式)? 这意味着设置一个获取请求给所有"练习"并将其返回到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;

我的所有请求都转到工作人员上下文(在这种情况下,提取的正常工作不起作用) 但是,如果我的所有请求都转到 master-context ,则fetched属性按预期工作!!

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

有人可以解释一下,为什么这不适用于其他的managedObjectContext?

0 个答案:

没有答案
相关问题