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"]); }}
这是我正在制作的iPad游戏中的一些代码,我使用Core Data来存储关卡.当一个关卡完成并获胜后,我想为该关卡设置最佳时间.计算所花费的时间,如果它比之前的最佳时间更好,我想将其设置为该级别的最佳时间.
当这个代码尝试从self.puzzle(Core Data中的NSManagedobject)中检索最佳时间时,此代码在’int bestTime’行上失败.最佳时间存储为Core Data模型中的Integer 32.它因SIGABRT错误而失败.
'[<NSManagedobject 0x95334d0> valueForUndefinedKey:]: the entity Puzzle is not key value Coding-compliant for the key "bestTime".'
我在网上搜索了为什么会发生这种情况以及如何解决它的原因,但似乎没有任何帮助.在其他地方我从Core Data模型访问Integer值并且它们完美地工作,尽管它们用于过滤和排序查询.
我也不知道我设置值的行是否有效.
任何有关这方面的帮助将不胜感激.
编辑:这是获取一系列谜题的代码,其中一个被认为是上面的谜题.
// 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 wantnspredicate *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];解决方法 好的,首先,我要感谢所有提出想法的人.他们可能没有帮助我解决问题,但我学到了更多关于核心数据的知识,当事情不起作用时,找出我应该检查的内容总是好的.
我真的不知道问题是什么.直到今天早上,我认为Xcode打开了大约5天,昨天我将属性“bestTime”添加到数据模型中.我只能假设在5天内,Xcode变得有点不稳定,并认为它没有被保存.我已经检查过我已经保存了模型属性,事实上我必须检查3到4次以及我做出任何更改后按命令S的习惯.
无论如何,我今天早些时候重新启动了我的机器,当我几分钟前启动Xcode时,我意识到’bestTime’不在模型文件中.我添加了它,重置iPad模拟器上的设置,它工作.
再次感谢大家的帮助,对不起解决方案不是更有趣和基于代码.虽然这让我感觉更好,但我的代码不是原因.
总结以上是内存溢出为你收集整理的objective-c – 实体不是密钥的密钥值编码兼容全部内容,希望文章能够帮你解决objective-c – 实体不是密钥的密钥值编码兼容所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)