gpt4 book ai didi

ios - 核心数据实体中的托管对象导致 "is not key value coding-compliant for key"错误

转载 作者:行者123 更新时间:2023-11-28 19:13:10 26 4
gpt4 key购买 nike

我对 Core Data 和 Objective-C 还很陌生。我一直在查阅 Core Data 文档,但不知道自己做错了什么。

在运行时,将 NSManagedObject“ReportItem”添加到 NSManagedObject“RoomItem”中的 NSMutableSet“报告”时出现以下错误:NSUnknownKeyException', reason: '[<RoomItem 0x747c850> valueForUndefinedKey:]: the entity RoomItem is not key value coding-compliant for the key "reports"

错误发生在下面“creatReportForRoom”方法中的“RoomList”存储类内部,该方法在输入相关数据的 UIViewController 中的 viewWillDisapear 上调用:

- (ReportItem *)creatReportForRoom:(RoomItem *)currentRoom Report:(ReportItem *)report
{
NSDate *dateCreated = [NSDate date];

ReportItem *detailItem = [NSEntityDescription insertNewObjectForEntityForName:@"ReportItem" inManagedObjectContext:context];

[detailItem setDateReportCreated:dateCreated];

NSMutableSet *reports = [currentRoom mutableSetValueForKey:@"reports"];

[reports addObject:detailItem]; //error is occurring at this line

[allReports addObject:detailItem];
return detailItem;
}

“RoomItem”NSManagedObject 文件在这里:

房间元素.h

#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>

@interface RoomItem : NSManagedObject

@property (nonatomic, strong) NSString *building;
@property (nonatomic, strong) NSString *room;
@property (nonatomic, retain) NSString *imageKey;
@property (nonatomic, retain) UIImage *buildingImage;
@property (nonatomic, strong) UIImage *buildingThumbnail;
@property (nonatomic, strong) NSData *buildingThumbnailData;
@property (nonatomic) double objectIndex;
@property (nonatomic, strong) NSDate *dateCreated;

@property (nonatomic, retain) NSMutableSet *reports;

@end

房间元素.m

#import "RoomItem.h"

@implementation RoomItem

@dynamic building, buildingThumbnail, buildingThumbnailData, objectIndex, room, dateCreated, imageKey, buildingImage, reports;

@end

我在创建和存储 RoomItem 时包含了“createItem”方法,以防我在那里做错了什么:

- (RoomItem *)createItem
{
double order;

//create new roomItem
//tracks what number item it's creating
if ([allItems count] == 0) {
order = 1.0;
}
else
{
order = [[allItems lastObject] objectIndex] + 1;
}
NSLog(@"Adding after %d items, order = %.2f", [allItems count], order);

RoomItem *detailItem = [NSEntityDescription insertNewObjectForEntityForName:@"RoomItem"
inManagedObjectContext:context];
[detailItem setObjectIndex:order];
[detailItem setDateCreated:[NSDate date]];

[allItems addObject:detailItem];

return detailItem;
}

具有关系的数据模型: enter image description here

关系图: enter image description here

如有任何关于解决此问题的建议,我们将不胜感激。如果有任何我未能包含的内容可能有帮助,请告诉我。

谢谢!

最佳答案

您的图片中显示的核心数据模型与您的代码之间存在差异。

  • 在模型图像中,reports 是从ReportItemRoomItem 的关系。
  • 您的代码将其视为从 RoomItemReportItem 的关系。

如果后者是你想要的,那么你必须在 Core Data 模型编辑器中正确命名关系:reports as a relationship on RoomItem and roomReportsFor 作为 ReportItem 的反向关系。

我还强烈建议您不要自己编写托管对象子类文件,而是让它由 Xcode 生成:在 Core Data 模型编辑器中选择实体,然后选择“编辑器 ->从菜单中创建 NSManagedObject 子类 ...”。

“RoomItem.h”文件中还有另一个错误:对多关系的数据类型是NSSet,而不是NSMutableSet

使用 Xcode 创建的托管对象子类文件有助于避免此类不一致和错误。您只需要记住在更改核心数据模型后重新创建文件。

(只是为了完整起见:还有其他工具可以创建托管对象子类,例如有人推荐的 mogenerator 。)


这是我认为关系应该是什么样子的简化版本:

enter image description here

  • reports:从RoomItemReportItem(一对多关系),
  • room:从 ReportItemRoomItem(一对一关系,与 reports 相反)。<

关于ios - 核心数据实体中的托管对象导致 "is not key value coding-compliant for key"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13897348/

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