gpt4 book ai didi

ios - 从Core-Data请求不同的NSManagedObject属性实例时返回什么类?

转载 作者:行者123 更新时间:2023-12-01 19:05:36 25 4
gpt4 key购买 nike

我有一个简单的情况,我有一个CDPerson类,它是NSManagedObject的子类。此类包含与CDHair类(也是NSManagedObject的子类)的一对一关系。 CDPerson类上的关系属性称为“头发”。

我想了解ManagedObjectContext中所有CDPerson实例实际使用的不同CDHair实例。

我正在获取一个独特的属性列表(这部分有效),

 NSFetchRequest* fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Person"];
fetchRequest.returnsDistinctResults = YES;
fetchRequest.propertiesToFetch = @[@"hair"];
fetchRequest.resultType =NSDictionaryResultType;
fetchRequest.predicate=[NSPredicate predicateWithFormat:@"hat=='no'"];
fetchRequest.returnsDistinctResults = YES;
NSArray* fetchResults = [context executeFetchRequest:fetchRequest error:&error];

fetchResults在NSArray中按预期方式。 fetchResults [0]是预期的NSDictionary。 fetchResults [0] [@“hair”]解析为某种东西,但我不知道它是什么。它的描述是
0x8b7b120 <x-coredata://C7E53293-94C7-444D-8162-167B1D66A961/Hair/p33>

它似乎没有选择器。如果我将其转换为CDHair并尝试在实例上使用属性,例如.color,则会收到“无法识别的选择器”错误。
CDTest[2865:70b] -[_NSObjectID_48_0 color]: unrecognized selector sent to instance 0x8ba8670

首先,我不知道_NSObjectID_48_0是什么类。
其次,我发现从提取中检索的属性将是CDHair的CoreData实例,但事实并非如此。它也不是NSManagedObject。

我哪里出问题了?

最佳答案

由于您已经明确设置

fetchRequest.resultType = NSDictionaryResultType;

提取请求返回一个字典,并表示与其他对象的关系
通过 NSManagedObjectID。您可以从“托管
对象ID”和 objectWithIDexistingObjectWithID方法。例如:
NSManagedObjectID *mid = fetchResults[0][@"hair"];
CDHair *hair = (CDHair *)[context objectWithID:mid];
NSString *color = hair.color;

但是将 propertiesToFetch设置为 CDHair的实际属性可能会更容易
例如,您感兴趣的
fetchRequest.propertiesToFetch = @[@"hair.color"];

然后结果数组看起来像
({    "hair.color" = green;},{    "hair.color" = red;})

and you can access it like

NSString *color = fetchResults[0][@"hair.color"];

关于ios - 从Core-Data请求不同的NSManagedObject属性实例时返回什么类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19840614/

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