ios - 核心数据:为啥有时会出现“Entity name must not be nil”?

     2023-03-05     226

关键词:

【中文标题】ios - 核心数据:为啥有时会出现“Entity name must not be nil”?【英文标题】:ios - core data: Why does "Entity name must not be nil" sometimes occur?ios - 核心数据:为什么有时会出现“Entity name must not be nil”? 【发布时间】:2011-04-10 14:40:15 【问题描述】:

大家好。我正在编写一个 ios 应用程序,其中包含多个子视图,可以通过按一下按钮单独创建。每个子视图都有一个“组”实例,即通过核心数据保存的实体。 'group' 与 'contact' 是一对多的关系。当联系人被拖到子视图上时,它会保存在给定“组”的核心数据中。这可以正常工作 3 次。每 4 次将联系人拖到另一个子视图时,应用程序就会崩溃。

代码如下:

- (void)fetchContacts 
if(personRecordIDsArray==nil) 
    personRecordIDsArray = [[NSMutableArray alloc] init];
    NSFetchRequest *request = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Contact" inManagedObjectContext:managedObjectContext];
    [request setEntity:entity];
    [entity release];

    NSError *error = nil;
    NSMutableArray *mutableFetchResults = [[[managedObjectContext executeFetchRequest:request error:&error] mutableCopy] autorelease];
    if (mutableFetchResults == nil) 
        // Handle the error.
    
    [error release];
    [request release];
    for (Contact *contact in mutableFetchResults) 
        if(contact.belongsToGroup == group) 
            [personRecordIDsArray addObject:contact.recordId];
        
    
   
NSLog(@"%d", [personRecordIDsArray count]);

- (void)addContactsToGroup:(NSArray*)arrayOfPeople 
[self fetchContacts];
for(int i = 0; i<[arrayOfPeople count]; i++) 
    ABRecordRef person = [arrayOfPeople objectAtIndex:i];
    NSNumber *personRecordId = [NSNumber numberWithInteger:ABRecordGetRecordID(person)];
    if(![self groupContainsContactWithRecordID:personRecordId]) 
        NSString *compositeName = (NSString *)ABRecordCopyCompositeName(person);
//Here is when the error occurs:
        Contact *contact = (Contact*)[NSEntityDescription insertNewObjectForEntityForName:@"Contact" inManagedObjectContext:managedObjectContext];
        contact.compositeName = compositeName;
        contact.recordId = personRecordId;
        contact.belongsToGroup = group;
        NSError *error = nil;
        if (![managedObjectContext save:&error]) 
            NSLog(@"Error in addContactsToGroup!");
        [error release];    
        [personRecordIDsArray addObject:personRecordId];
    


当尝试将联系人添加到组时,错误提示:

2011-04-10 16:16:36.152 TestApp[796:207] * 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“实体名称不得为 nil。” p>

我真的玩了一段时间,也无法在互联网上找到类似的东西。有趣的是,该错误总是在第四次将联系人添加到不同的子视图时发生。有人知道我该如何解决这个问题吗?我真的没有想法......

哦,调试器说:

#0  0x956e2156 in __kill
#1  0x956e2148 in kill$UNIX2003
#2  0x95774899 in raise
#3  0x9578a9b8 in abort
#4  0x91de4fda in __gnu_cxx::__verbose_terminate_handler
#5  0x0141c4e7 in _objc_terminate
#6  0x91de317a in __cxxabiv1::__terminate
#7  0x91de31ba in std::terminate
#8  0x91de32b8 in __cxa_throw
#9  0x0141c635 in objc_exception_throw
#10 0x00ce1486 in +[NSManagedObject(_PFDynamicAccessorsAndPropertySupport) classForEntity:]
#11 0x00ce11f6 in _PFFastEntityClass
#12 0x00d06e73 in +[NSEntityDescription insertNewObjectForEntityForName:inManagedObjectContext:]
#13 0x00009a02 in -[GroupViewController addContactsToGroup:] at GroupViewController.m:152
#14 0x00002f31 in -[GrouperViewController dragingWillEnd:forContacts:atPosition:] at GrouperViewController.m:98
#15 0x0000cbb8 in -[ContactsTableViewController longPressOnView:] at ContactsTableViewController.m:65

【问题讨论】:

奇怪!您可以尝试不将 (Contact*) 转换为 insertNewEntityForName 方法吗?我以前从未见过它是这样构造的,即使它有点道理,你也不需要它。看看有没有区别? 【参考方案1】:

我猜测问题在于托管对象上下文已与托管对象模型分离,这使得 NSEntityDescription 无法找到并返回应表示 Contact 实体的类。

最可能的原因是初始化托管对象上下文但未设置其模型或以某种方式将模型设置为 nil。我建议在调用失败之前完全记录托管对象上下文。特别要记录它的模型,以确保它有一个模型,并且每次调用都保持相同的模型。

【讨论】:

为啥向核心数据实体添加双重属性会导致远距离相关实体中的属性冲突出现 NSInternalInconsistencyException?

】为啥向核心数据实体添加双重属性会导致远距离相关实体中的属性冲突出现NSInternalInconsistencyException?【英文标题】:WhyDoesAddingaDoubleAttributetoaCoreDataEntityCauseNSInternalInconsistencyExceptionsforPropertyConflictsinDistantlyRelatedEntities?为什么... 查看详情

为啥我的代码会出现分段/核心转储错误?

】为啥我的代码会出现分段/核心转储错误?【英文标题】:Whyismycodegivingmeasegmentation/coredumperror?为什么我的代码会出现分段/核心转储错误?【发布时间】:2019-12-0318:46:02【问题描述】:代码应该是转置一个矩阵:#include<iostream... 查看详情

为啥在 Windows 上的 Chrome 或 Safari 上查看时,html 文本有时会出现乱码?

】为啥在Windows上的Chrome或Safari上查看时,html文本有时会出现乱码?【英文标题】:WhywouldhtmltextsometimesappeargarbledwhenviewingonChromeorSafarionWindows?为什么在Windows上的Chrome或Safari上查看时,html文本有时会出现乱码?【发布时间】:2011-... 查看详情

为啥显示自绘无模对话框时会出现任务栏? .. 有时?

】为啥显示自绘无模对话框时会出现任务栏?..有时?【英文标题】:WhydoesthetaskbarappearwhenIdisplayaself-drawnmodelessdialog?..sometimes?为什么显示自绘无模对话框时会出现任务栏?..有时?【发布时间】:2011-09-0123:25:56【问题描述】:我... 查看详情

iOS 中的核心数据故障

】iOS中的核心数据故障【英文标题】:coredatafailureiniOS【发布时间】:2013-08-1703:51:04【问题描述】:我正在使用核心数据开发一个iphone应用程序和数据库即时通讯。在保存核心数据的同时正常工作。但有时,保存失败。这会导致... 查看详情

iOS MagicalRecord 之谜。为啥在 truncateAll 后重新启动时我的数据会重新出现?

】iOSMagicalRecord之谜。为啥在truncateAll后重新启动时我的数据会重新出现?【英文标题】:iOSMagicalRecordmystery.WhydoesmydatareappearonrestartaftertruncateAll?iOSMagicalRecord之谜。为什么在truncateAll后重新启动时我的数据会重新出现?【发布时间... 查看详情

为啥有时小吃店会失败

】为啥有时小吃店会失败【英文标题】:Whysometimessnackbarisfailing为什么有时小吃店会失败【发布时间】:2021-06-3003:11:43【问题描述】:请帮助解释为什么有时我的SnackBar会显示错误。我不明白问题会在什么情况下出现。我只想指... 查看详情

多线程核心数据有时会返回 nil 属性

】多线程核心数据有时会返回nil属性【英文标题】:Multi-threadedcoredatasometimesreturnsnilproperties【发布时间】:2019-02-1113:43:04【问题描述】:我是核心数据的新手。我有一个使用核心数据作为本地存储的应用程序。写入和读取核心数... 查看详情

iphone核心数据:三层Entity关系混乱

】iphone核心数据:三层Entity关系混乱【英文标题】:iphonecoredata:threetierEntityrelationshipconfusion【发布时间】:2011-10-2711:47:51【问题描述】:下面是核心数据表。我想将“Color”实体与“detailsColor”属性(在Details实体中)相关联。这... 查看详情

为啥 React Native iOS 模拟器的重新加载快捷方式有时会停止工作?

】为啥ReactNativeiOS模拟器的重新加载快捷方式有时会停止工作?【英文标题】:WhydoesReactNativeiOSemulator\'sreloadshortcutsometimesstopworking?为什么ReactNativeiOS模拟器的重新加载快捷方式有时会停止工作?【发布时间】:2020-08-0702:24:56【问... 查看详情

向 Solr 核心添加字段时,为啥会出现“ManagedIndexSchema Error persisting managed schema => FileNotFoundException:

】向Solr核心添加字段时,为啥会出现“ManagedIndexSchemaErrorpersistingmanagedschema=>FileNotFoundException:(Accessisdenied)”?【英文标题】:WhydoIget"ManagedIndexSchemaErrorpersistingmanagedschema=>FileNotFoundException:(Accessisdenie 查看详情

为啥 PyQt 有时会在退出时崩溃?

】为啥PyQt有时会在退出时崩溃?【英文标题】:WhydoesPyQtsometimescrashonexit?为什么PyQt有时会在退出时崩溃?【发布时间】:2020-03-2523:15:27【问题描述】:下面给定的代码显示一个QMainWindow和4个QGraphicsView以在其中使用鼠标进行绘制... 查看详情

核心数据迁移真的很慢,为啥会这样?

】核心数据迁移真的很慢,为啥会这样?【英文标题】:CoreDataMigrationreallySlow,Whydoesithappenatall?核心数据迁移真的很慢,为什么会这样?【发布时间】:2009-06-2415:14:24【问题描述】:我正在开发一个桌面MacOSX应用程序,它使用CoreD... 查看详情

核心数据:设置Entity.Attribute,类型问题

】核心数据:设置Entity.Attribute,类型问题【英文标题】:CoreData:SettingEntity.Attribute,TypeIssues【发布时间】:2011-08-0121:35:17【问题描述】:我目前正在尝试通过填写所需属性来设置我的实体。我通过解析XML响应并在属性出现时分配... 查看详情

为啥在我运行迁移时 Entity Framework 包会自动更新?

...505:34:45【问题描述】:我在.NETStandard2.0项目中定义了一个数据库上下文,以便.NET5.0和.NET4. 查看详情

核心数据:总是有反向关系。为啥?

】核心数据:总是有反向关系。为啥?【英文标题】:CoreData:Alwayshaveinverserelationship.Why?核心数据:总是有反向关系。为什么?【发布时间】:2013-04-3015:23:30【问题描述】:我知道Apple和共识都说,在CoreData中,每个关系都应该有... 查看详情

处理 managedObjectContext 的核心数据错误

】处理managedObjectContext的核心数据错误【英文标题】:CoredataerrordealingwithmanagedObjectContext【发布时间】:2012-12-2508:31:07【问题描述】:下面是我遇到错误的代码行。错误也在下面。我理解为什么会出现错误,因为managedObjectContext为... 查看详情

为啥应用程序找不到我恢复的核心数据文件?

】为啥应用程序找不到我恢复的核心数据文件?【英文标题】:WhyismyrestoreoftheCoreDatafilesnotfoundbyapp?为什么应用程序找不到我恢复的核心数据文件?【发布时间】:2015-02-0318:39:25【问题描述】:更新:我正在尝试备份和恢复我的... 查看详情