
我使用数据模型设计器来设置一个名为“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核心数据关系错误所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)