Objective c 实体与密钥的键值编码不兼容

Objective c 实体与密钥的键值编码不兼容,objective-c,cocoa,core-data,Objective C,Cocoa,Core Data,该托管对象没有名为“bestTime”的属性。根据异常消息,它肯定是一个谜,因此您没有在模型中声明名为bestTime的属性(或者您拼写错误或大写不同)。我认为这里没有足够的信息来确定原因。你可以试着读一下这本书;一个可能的原因可能是,如果您使用普通init而不是initWithEntity初始化了这个特定的Puzzle实例。如果您稍后向模型添加了属性bestTime,您可能忘记了将它们的声明和实现放在连接的托管对象类中 尝试在设计->数据模型->复制目标C中提供的方便操作。。。方法声明/实现到

该托管对象没有名为“
bestTime
”的属性。根据异常消息,它肯定是一个谜,因此您没有在模型中声明名为
bestTime
的属性(或者您拼写错误或大写不同)。

我认为这里没有足够的信息来确定原因。你可以试着读一下这本书;一个可能的原因可能是,如果您使用普通init而不是initWithEntity初始化了这个特定的Puzzle实例。

如果您稍后向模型添加了属性bestTime,您可能忘记了将它们的声明和实现放在连接的托管对象类中


尝试在设计->数据模型->复制目标C中提供的方便操作。。。方法声明/实现到剪贴板(编辑模型文件时)。

好的,首先,我要感谢所有提出想法的人。他们可能没有帮我解决问题,但我学到了更多关于核心数据的知识,当事情不起作用时,找出我应该检查的内容总是好的

我真的不知道问题出在哪里。直到今天早上,我认为Xcode已经打开了大约5天,昨天我在数据模型中添加了“bestTime”属性。我只能假设在过去的5天里,Xcode变得有点不稳定,并认为它在不稳定的情况下被保存了下来。我已经检查过我是否保存了模型属性,事实上我必须检查3到4次,以及我在做任何更改后点击Command+S的习惯

无论如何,我今天早些时候重新启动了我的机器,几分钟前启动Xcode时,我意识到“最佳时间”不在模型文件中。我添加了它,在iPad模拟器上重置了设置,它就工作了


再次感谢大家的帮助,很抱歉,解决方案没有那么有趣,而且是基于代码的。虽然这让我感觉更好,因为我的代码不是原因。

我确实解决了同样的问题,删除并再次创建数据模型,然后重新清理并重建。
我认为这个错误是由于核心数据有时不更新内部的一些数据造成的。

如果将JSON解析为托管对象,请确保您使用的是
coreDataPropertyName
属性,而不是JSON中的
JSON键名
键。当它们的名字如此相似时,很容易混淆


这个错误让我发疯,这一切都是因为我使用的是
imageURL
而不是
imageURL

,我在项目的xcdatamodel文件中定义了“bestTime”,就像我正在访问的所有其他东西一样。我曾尝试直接从该文件复制和粘贴名称。它是否确实位于您尝试访问的同一实体中?是的。我在行前放了一些日志,无法打印出我知道有效的其他属性。我已经比较了输出和它应该是什么,它是同一个模型。“bestTime”是您后来添加到模型中的属性吗?也就是说,这可能是迁移问题吗?我后来确实添加了它,但我从模拟器中删除了应用程序并重新安装了它。我还重置了模拟器的内容和设置,但它仍然无法工作。和以前一样的错误。我会看一看。谢谢至于初始化,我不知道。我在托管对象上下文上执行了一个获取请求,并将结果放入一个可变字典中。该对象只是从按下tableviewcell时所依据的对象中提取出来的。丹帕默:请编辑您的问题以包含获取请求。Puzzle不是我编写的继承自NSManagedObject的类,它只是一个NSManagedObject。从我读到的关于核心数据的内容来看,如果您没有任何需要在对象上运行的代码,那么这是一种很好的方法。对我来说,它只是一个属性集合。仅此而已。我最近经常看到这个问题,大多数情况下,它似乎是由于模拟器中的应用程序包保留了以前版本的数据模型中的旧.mom文件造成的。由于某些原因,当模型更改时,它并不总是被清除。重新启动机器导致模拟器构建一个全新的应用程序目录,从而解决了问题。从模拟器中删除应用程序也会修复它。我已尝试在模拟器中删除应用程序。问题实际上是Xcode认为它已经添加了“bestTime”属性,但实际上并没有这样做。重新启动OSX有帮助。非常感谢。重新启动Xcode、清除代码或从设备中删除应用程序都没有帮助。在OSX重启后重新启动Xcode时,模型的差异是明显的,这一次它表现得很好。谢谢你的提示!非常有用,我有同样的问题好几天了。现在,我重新启动了设备,清理了Xcode,重新启动了Mac,删除了应用程序,它神奇地工作了……这太疯狂了!我在另一台计算机中更新了coredata,将其推送到git存储库,并将其拉入我的计算机。我不得不再次保存它而不做任何更改!肯定是一个XCode错误。我使用雪豹,XCode 4.2。你的回答节省了我很多时间!谢谢!
    if (win) {
    // Game was won, set completed in puzzle and time
    // Calculate seconds taken
    int timeTaken = (int)([NSDate timeIntervalSinceReferenceDate] - self.gameStartTime);
    int bestTime = [[self.puzzle valueForKey:@"bestTime"] intValue];
    if (timeTaken < bestTime && bestTime != 0) {
        [self.puzzle setValue:[NSNumber numberWithInt:timeTaken] forKey:@"bestTime"];
        NSLog(@"Best time for %@ is %@", [self.puzzle valueForKey:@"name"], [self.puzzle valueForKey:@"bestTime"]);
    }
}
'[<NSManagedObject 0x95334d0> valueForUndefinedKey:]: the entity Puzzle is not key value coding-compliant for the key "bestTime".'
// Define our table/entity to use  
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Puzzle" inManagedObjectContext:managedObjectContext];   

// Setup the fetch request  
NSFetchRequest *request = [[NSFetchRequest alloc] init];  
[request setEntity:entity];   

// Set the filter for just the difficulty we want
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"difficulty == %d", difficulty];
[request setPredicate:predicate];

// Define how we will sort the records  
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"sortid" ascending:YES];  
NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];  
[request setSortDescriptors:sortDescriptors];  
[sortDescriptor release];

// Fetch the records and handle an error  
NSError *error;  
NSMutableArray *mutableFetchResults = [[managedObjectContext executeFetchRequest:request error:&error] mutableCopy];