2016-03-30 11 views
0

起動時に4つのデフォルトレコードが事前に設定されている必要があるカテゴリエンティティを持つアプリケーションで作業しています。Swift 2.1のコアデータ - setValue()でデータを事前入力すると、最後のデータのみが残されます

データをプリロードするために私のアプリケーションをsqliteまたはcsvファイルにバンドルすることを検討しましたが、これは4レコードしかないため、実行時にデフォルト値を1回だけ実行する条件に注入することにしました。

私が直面してる問題は、次のコードブロックで、私は最後のレコードDrinkのみを持続できるということです。私は彼らが次のsetValue()に移動すると、自分自身を上書きすると思います。すべてのレコードを同じ属性に保持する方法を教えてください。

do { 
     let result = try context.executeFetchRequest(request) 
     print(result.count) 
     if result.count == 0 { 

      //Pre-populate recipe categories 
      let entityCategory = NSEntityDescription.entityForName("RecipeCategory", inManagedObjectContext: self.managedObjectContext) 
      let newCategory = NSManagedObject(entity: entityCategory!, insertIntoManagedObjectContext: self.managedObjectContext) 

      newCategory.setValue("Main", forKey: "name") 
      newCategory.setValue("Side", forKey: "name") 
      newCategory.setValue("Dessert", forKey: "name") 
      newCategory.setValue("Drink", forKey: "name") 

      do { 
       try newCategory.managedObjectContext?.save() 
      } catch { 
       let saveError = error as NSError 
       print(saveError) 
      } 

     } 
    } catch { 
     print("Error fetching data") 
    } 

答えて

3

設定するたびに新しいnewCategoryは作成されません。代わりにこれをやってみてください。

let categories = ["Main", "Side", "Dessert", "Drink"] 
for category in categories { 
    let newCategory = NSManagedObject(entity: entityCategory!, insertIntoManagedObjectContext: self.managedObjectContext) 
    newCategory.setValue(category, forKey: "name") 
} 

do { 
      try self.managedObjectContext.save() 
     } catch { 
      let saveError = error as NSError 
      print(saveError) 
     } 
+0

それが機能するようになりました。ありがとうございました! –

+0

指定した順序と同じ順序で確実に挿入する方法はありますか?私はそれを数回試してみて、それらがランダムな順序で永続していることを発見しました。 –

+0

CoreDataは値を順番に格納することと区別しません。すべてのフェッチはランダムな順序付けを返します。順序付けされたデータを取得するには何らかの方法でソートする必要があります。 – sschale

関連する問題