2016-09-13 10 views
1

私は正しいデータにコアデータを追加しようとしています(これはかなり新しく、 apologies)下のコードから、私の '目標'はコアデータをチェックし、空であればデフォルトのデータを追加することです。Xcode Swift - このクラスはキーのキーコードに準拠していませんuri

コード:

class func musicIsEmpty(managedObjectContext: NSManagedObjectContext)-> Bool{ 

    let defaultMusic = NSEntityDescription.entityForName("Music", inManagedObjectContext: managedObjectContext) 
    let defaultMusicSetOne = NSManagedObject(entity: defaultMusic!, insertIntoManagedObjectContext: managedObjectContext) as? Music 
    //defaultMusicSetOne = NSManagedObject(entity: defaultMusic!, insertIntoManagedObjectContext: managedObjectContext) as? Music 
    let fetchRequest = NSFetchRequest(entityName: "Music") 
    fetchRequest.entity = defaultMusic 

    defaultMusicSetOne!.uri = "spotify:track:1puJlKuYGH58SAFgXREUpE" 
    defaultMusicSetOne!.duration = 30.0 
    defaultMusicSetOne!.starttime = 49.0 
    defaultMusicSetOne!.xfade = 10.0 
    defaultMusicSetOne!.voiceover = "1.25s Next Up.mp3" 

    do{ 
     if let MusicSetResults = try managedObjectContext.executeFetchRequest(fetchRequest) as? [NSManagedObject]{ 

      if MusicSetResults == 0 
      { 
       defaultMusic!.setValue(defaultMusicSetOne?.uri, forKey: "uri") 
       defaultMusic!.setValue(defaultMusicSetOne?.duration, forKey: "duration") 
       defaultMusic!.setValue(defaultMusicSetOne?.starttime, forKey: "starttime") 
       defaultMusic!.setValue(defaultMusicSetOne?.xfade, forKey: "xfade") 
       defaultMusic!.setValue(defaultMusicSetOne?.voiceover, forKey: "voiceover") 
       return true 
      } 

      else 
      { 
       return false 
      } 
     } 
    } 
    catch let error as NSError{ 
     print("Error: \(error.debugDescription)") 
    } 
    return false 
} 

がMusic.Swift:

extension Music { 

@NSManaged var voiceover: String? 
@NSManaged var xfade: NSNumber? 
@NSManaged var duration: NSNumber? 
@NSManaged var starttime: NSNumber? 
@NSManaged var uri: String? 

} 

しかし、私はエラーが私はこの確信している「このクラスは、キー値コーディング準拠のキーURIのではない」得続けますすべての.set値に適用されます。私はdefaultMusicに "uri"フィールドがあり、defaultMusicもMusic Objectのインスタンスであるため、なぜこれが表示されているのか分かりません。 .setValueの形式が間違っていますか?それとも何か他のことですか?

助けがあれば助かります。

ありがとうございます!

+0

どのようなタイプの 'uri'ですか?エラーは、基本的に "私は主要なURIがX型であることを期待していますが、あなたは私にY型を与えました"と言います。また、どこでエラーが発生しますか? 'MusicSetResults == 0'の場合は? – Lawrence413

+0

uriはString型ですが、MusicSetResults == 0の場合はエラーです。 –

+0

なぜこれらの値を 'setValue'で設定しますか?あなたはそれらを普通に設定できませんか? – Sweeper

答えて

2

私はあなたが実際にこの意味を疑う:はいデフォルト値で新しいオブジェクトを挿入する場合には、企業は、空の場合

チェックを

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 
} 

管理対象オブジェクトのコンテキストを保存して、新しいオブジェクトを永続化することも考えられます。

+0

の代わりに使用するはずですね。ありがとう!はい、あなたの最後のコメントから変更したものですうん私は私たちが笑っているように管理オブジェクトを保存しようとしている –

0

defaultMusicは、オブジェクトではなく、NSEntityDescriptionです。

(時にはスウィフト利用デフォルトのデータ型をさせることは混乱することができます)

+0

ああ大丈夫です!私は "defaultMusic"ではなく "defaultMusicSetOne!.setValue(defaultMusicSetOne?.uri、forKey:" uri ")' –

関連する問題