cocoa – iPhone核心数据关系错误

cocoa – iPhone核心数据关系错误,第1张

概述我正在构建核心数据 iphone应用程序,并且无法检索一对多的关系数据.我解释时请耐心等待. 我使用数据模型设计器来设置一个名为“Item”的实体,其中包含许多名为“Comment”的实体.然后我检索多个实体并在UITableView中显示它们.我像这样获取这些实体(在viewDidLoad方法中): NSFetchRequest *request = [[NSFetchRequest alloc 我正在构建核心数据 iphone应用程序,并且无法检索一对多的关系数据.我解释时请耐心等待.

我使用数据模型设计器来设置一个名为“Item”的实体,其中包含许多名为“Comment”的实体.然后我检索多个实体并在UItableVIEw中显示它们.我像这样获取这些实体(在vIEwDIDLoad方法中):

NSFetchRequest *request = [[NSFetchRequest alloc] init];NSEntityDescription *entity = [NSEntityDescription entityForname:@"Items" inManagedobjectContext:self.managedobjectContext];[request setEntity:entity];nspredicate *predicate = [nspredicate predicateWithFormat:@"(Item_to_Areas.name liKE %@)",[areaManagedobject valueForKey:@"name"]];[request setPredicate:predicate];[request setRelationshipkeypathsForPrefetching:[NSArray arrayWithObject:@"Item_to_item_comments"]];NSLog(@"Results: %@",[mutableItemsFetchResults description]);mutableItemsFetchResults = [[managedobjectContext executeFetchRequest:request error:nil] mutablecopy];[request release];

当用户点击一行时,我选择特定的entiny,在其init方法中将其传递给新的表视图控制器,并将新的视图控制器推送到堆栈:

- (voID)tableVIEw:(UItableVIEw *)tableVIEw dIDSelectRowAtIndexPath:(NSIndexPath *)indexPath {NSLog(@"itemObject: %@",[mutableItemsFetchResults objectAtIndex:indexPath.row]);inspectionItemCommentsVIEwController *itemCommentsVIEwController =     [[inspectionItemCommentsVIEwController alloc]                                                                initWithManagedobjectContext:self.managedobjectContext                                                                 itemObject:[mutableItemsFetchResults objectAtIndex:indexPath.row]];itemCommentsVIEwController.hIDesBottombarWhenPushed = YES;[self.navigationController pushVIEwController:itemCommentsVIEwController animated:YES];[itemCommentsVIEwController release];}

在第一个块中,NSLog输出显示检索到“Item_to_item_comments”关系实体,但在第二个块中,即使我调用了[request setRelationshipkeypathsForPrefetching:[NSArray arrayWithObject:@“Item_to_item_comments”]],也没有.

这是第一个NSLog输出的一部分:

Results: ("<NSManagedobject: 0xb356b70> (entity: Items; ID: 0xb34fe60 <x-coredata://E43A90B5-AF0E- 4394-B4A7-5EFE74E181F8/Items/p1> ; data: {\n    Clean = nil;\n    Description = \"\";\n    ItemToinformation = \"<relationship fault: 0x5e1ef00 'ItemToinformation'>\";\n    \"Item_to_Areas\" = \"0xb33fd30 <x-coredata://E43A90B5-AF0E-4394-B4A7-5EFE74E181F8/Areas/p1>\";\n    \"Item_to_item_comments\" = \"<relationship fault: 0x5e1d300 'Item_to_item_comments'>\";\n    Keys = nil;\n    name = Other;\n    \"Tenant_agrees\" = nil;\n    Undamaged = nil;\n    Working = nil;\n})","<NSManagedobject: 0xb35a930> (entity: Items; ID: 0xb32acc0 <x-coredata://E43A90B5-AF0E-4394-B4A7-5EFE74E181F8/Items/p2> ; data: {\n    Clean = nil;\n    Description = \"\";\n    ItemToinformation = \"<relationship fault: 0x790de40 'ItemToinformation'>\";\n    \"Item_to_Areas\" = \"0xb33fd30 <x-coredata://E43A90B5-AF0E-4394-B4A7-5EFE74E181F8/Areas/p1>\";\n    \"Item_to_item_comments\" =     (\n        \"0xb35bcb0 <x-coredata://E43A90B5-AF0E-4394-B4A7-5EFE74E181F8/Item_Comments/p13>\",\n        \"0xb35bcd0 <x-coredata://E43A90B5-AF0E-4394-B4A7-5EFE74E181F8/Item_Comments/p37>\",\n        \"0xb35bca0 <x-coredata://E43A90B5-AF0E-4394-B4A7-5EFE74E181F8/Item_Comments/p5>\",\n        \"0xb35bcc0 <x-coredata://E43A90B5-AF0E-4394-B4A7-5EFE74E181F8/Item_Comments/p26>\"\n    );\n    Keys = nil;\n    name = lights;\n    \"Tenant_agrees\" = nil;\n    Undamaged = nil;\n    Working = nil;\n})",

您可以看到提取了Items实体,包括Item_to_item_comments.这是第二个NSLog:

itemObject: <NSManagedobject: 0xe20af50> (entity: Items; ID: 0xe209fc0 <x- coredata://E43A90B5-AF0E-4394-B4A7-5EFE74E181F8/Items/p2> ; data: {    Clean = nil;    Description = "";    ItemToinformation = "<relationship fault: 0xe302e40 'ItemToinformation'>";    "Item_to_Areas" = "0xe500b90 <x-coredata://E43A90B5-AF0E-4394-B4A7-5EFE74E181F8/Areas/p1>";    "Item_to_item_comments" = "<relationship fault: 0xe302e60 'Item_to_item_comments'>";    Keys = nil;    name = lights;    "Tenant_agrees" = nil;    Undamaged = nil;    Working = nil;})

现在,Item_to_item_comments是错误的.类似地,在推送视图控制器中,传递Items实体,但不传递Item_to_item_comments.

我想我错过了一些明显的东西,但经过一天花在这个问题上,我无法弄清楚.

任何帮助,将不胜感激.

彼得

解决方法 “错误”并不意味着错误,它只是意味着返回的对象是一个“幽灵”而没有读入其属性.为关系的另一方获取错误是正常的,因为你没有设置的提取通过其关系从一个不受控制的对象创建级联.

当您访问故障的属性时,它将作为一个功能齐全的对象出现故障.

编辑:

来自评论:

The problem is that I am requesting
such relationship through NSLog,but I
still can’t get the relationship
entitIEs.

不你不是.您只需要自己请求Items实体然后记录它们.他们按照预期为他们的关系返回错误.只有当你问每个人在关系另一边的实际对象时,你才能保证看到一个对象而不是一个错误.

这就是你需要强制关系中对象的错误:

NSLog(@"itemObject.Item_to_item_comments: %@",[mutableItemsFetchResults objectAtIndex:indexPath.row].Item_to_item_comments.someattribute]);

你的另一个问题是你要比较两个单独提取的结果.这个:

NSLog(@"Results: %@",[mutableItemsFetchResults description]);mutableItemsFetchResults = [[managedobjectContext executeFetchRequest:request error:nil] mutablecopy];

…在获取之前记录mutableItemsFetchResults.下一个NSLog(可能)在获取后记录结果.这意味着您可能会在两种不同的故障状态下查看两组不同的对象.

您可能也有问题,因为mutableItemsFetchResults显然是一个属性,但您没有使用self.mutableItemsFetchResults表示法来确保它被正确保留.另外,我认为你不需要itutablecopy.

总结

以上是内存溢出为你收集整理的cocoa – iPhone核心数据关系错误全部内容,希望文章能够帮你解决cocoa – iPhone核心数据关系错误所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1006104.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-22
下一篇2022-05-22

发表评论

登录后才能评论

评论列表(0条)

    保存