Ios Xcode Swift-此类不符合密钥uri的键值编码
我正在尝试将数据添加到核心数据中,我认为我在正确的轨道上(我对这一点相当陌生,因此,抱歉),从下面的代码中,我的“目标”是检查核心数据,如果它是空的,则添加默认数据 代码: 音乐。斯威夫特:Ios Xcode Swift-此类不符合密钥uri的键值编码,ios,swift,xcode,core-data,Ios,Swift,Xcode,Core Data,我正在尝试将数据添加到核心数据中,我认为我在正确的轨道上(我对这一点相当陌生,因此,抱歉),从下面的代码中,我的“目标”是检查核心数据,如果它是空的,则添加默认数据 代码: 音乐。斯威夫特: extension Music { @NSManaged var voiceover: String? @NSManaged var xfade: NSNumber? @NSManaged var duration: NSNumber? @NSManaged var starttime: NSNumber
extension Music {
@NSManaged var voiceover: String?
@NSManaged var xfade: NSNumber?
@NSManaged var duration: NSNumber?
@NSManaged var starttime: NSNumber?
@NSManaged var uri: String?
}
但是我不断得到错误“这个类不符合密钥uri的键值编码”,我确信这将适用于所有的.setValues。我不知道为什么会显示为defaultMusic有“uri”字段,defaultMusic也是Music对象的一个实例。.setValue的格式是否错误?还是别的什么
任何帮助都会很好
提前谢谢
defaultMusic
是NSEntityDescription
,而不是Music
对象
(有时让Swift使用默认数据类型可能会令人困惑。)我怀疑您的意思是: 检查实体是否为空,如果为空,则插入具有默认值的新对象
class func musicIsEmpty(managedObjectContext: NSManagedObjectContext)-> Bool {
let musicEntity = NSEntityDescription.entityForName("Music", inManagedObjectContext: managedObjectContext)!
let fetchRequest = NSFetchRequest()
fetchRequest.entity = musicEntity
do {
let musicSetResults = try managedObjectContext.executeFetchRequest(fetchRequest) as! [Music]
if musicSetResults.isEmpty
{
let defaultMusicSetOne = NSManagedObject(entity: musicEntity, insertIntoManagedObjectContext: managedObjectContext) as! Music
defaultMusicSetOne.uri = "spotify:track:1puJlKuYGH58SAFgXREUpE"
defaultMusicSetOne.duration = 30.0
defaultMusicSetOne.starttime = 49.0
defaultMusicSetOne.xfade = 10.0
defaultMusicSetOne.voiceover = "1.25s Next Up.mp3"
return true
}
}
catch let error as NSError{
print("Error: \(error.debugDescription)")
}
return false
}
您还可以考虑保存托管对象上下文以使新对象持久化。
什么类型是“代码> URI < /代码>?错误基本上是这样的:“我希望键uri是X类型,但您给了我Y类型”。另外,您从哪里得到错误?在中,如果MusicSetResults==0
?uri是字符串类型,如果MusicSetResults==0,则错误在侧边,我在其中设置了.setValue。您为什么通过setValue
设置这些值?你就不能正常设置它们吗?我是IOS/Xcode/Swift->新手,我只是在学习教程。其中大多数都显示“person.setValue(“Bart”,forkey:“name”)”,所以我只是想用它。是否不需要使用setValue?啊,好的!我明白了,我应该使用defaultMusicSetOne!而不是“defaultMusic”!。setValue(defaultMusicSetOne?.uri,forKey:“uri”)
Hey!谢谢是的,这就是我从你上次的评论中改变的。是的,我正在尝试实现save托管对象,就像我们说的lol一样
class func musicIsEmpty(managedObjectContext: NSManagedObjectContext)-> Bool {
let musicEntity = NSEntityDescription.entityForName("Music", inManagedObjectContext: managedObjectContext)!
let fetchRequest = NSFetchRequest()
fetchRequest.entity = musicEntity
do {
let musicSetResults = try managedObjectContext.executeFetchRequest(fetchRequest) as! [Music]
if musicSetResults.isEmpty
{
let defaultMusicSetOne = NSManagedObject(entity: musicEntity, insertIntoManagedObjectContext: managedObjectContext) as! Music
defaultMusicSetOne.uri = "spotify:track:1puJlKuYGH58SAFgXREUpE"
defaultMusicSetOne.duration = 30.0
defaultMusicSetOne.starttime = 49.0
defaultMusicSetOne.xfade = 10.0
defaultMusicSetOne.voiceover = "1.25s Next Up.mp3"
return true
}
}
catch let error as NSError{
print("Error: \(error.debugDescription)")
}
return false
}