集成Realm时出错

时间:2016-07-08 09:07:16

标签: ios swift realm

我试图将Realm集成到我的iOS应用中,因此数据可以持续存在。

现在我收到此错误:

  

由于未捕获的异常终止应用' RLMException',原因:   '财产'部分'被宣布为' NSArray',这不是   支持的RLMObject属性类型。所有属性都必须是基元,   NSString,NSDate,NSData,NSNumber,RLMArray,RLMLinkingObjects,或   RLMObject的子类。看到   https://realm.io/docs/objc/latest/api/Classes/RLMObject.html了解更多信息   。信息#&39;第一次抛出调用堆栈:...

有人可以告诉我我做错了吗?

持有sections的对象类。

class Workout: Object {
  dynamic var image: String = ""
  dynamic var name: String = ""
  dynamic var type: String = ""

  dynamic var sections:[String] = []

  var dayOne = List<Exercise>()
  var dayTwo = List<Exercise>()
  var dayThree = List<Exercise>()
  var dayFour = List<Exercise>()
  var dayFive = List<Exercise>()

  func addExerciseToSection(sectionName: String, exerciseName: Exercise) {
      if sectionName == "Day 1" {
        dayOne.append(exerciseName)
      } else if sectionName == "Day 2" {
        dayTwo.append(exerciseName)
      } else if sectionName == "Day 3" {
        dayThree.append(exerciseName)
      } else if sectionName == "Day 4" {
        dayFour.append(exerciseName)
      } else if sectionName == "Day 5" {
        dayFive.append(exerciseName)
      }
  }

  func getWorkoutInSection(workout: Workout, section: Int) -> List<Exercise>? {
      if section == 0 {
        return workout.dayOne
      } else if section == 1 {
        return workout.dayTwo
      } else if section == 2 {
        return workout.dayThree
      } else if section == 3 {
        return workout.dayFour
      } else if section == 4 {
        return workout.dayFive
      }
      return nil
  }
}

3 个答案:

答案 0 :(得分:5)

以下错误只是告诉您,您无法将某些类型分配给Realm Objects,并指定您可以使用的类型:

  

所有属性必须是基元,NSString,NSDate,NSData,NSNumber,   RLMArray,RLMLinkingObjects或RLMObject的子类。

取代这一行:

dynamic var sections:[String] = []

可能会解决您的错误。虽然,问题在于您构建数据的方式。看看Sectioned tableView example。加载视图时可以动态创建表视图部分,无需将其保存到领域对象。

如果您确实要保存section,可以考虑使用其他域对象来执行此操作,例如:

class Sections: Object{
    dynamic var section: String = "" 
} 

答案 1 :(得分:0)

它清楚地说你的属性resources :contacts do resources :tasks end =============== create_table "tasks", force: :cascade do |t| t.text "content" t.date "due" t.boolean "is_completed", default: false t.datetime "created_at", null: false t.datetime "updated_at", null: false t.integer "contact_id" end ======== 是数组并且它不受支持,你可以尝试使用dynamic var sections:[String] = []其中StringObject是Realm类包含你的字符串

答案 2 :(得分:0)

如果您不想保留sections属性,则需要通过

忽略它
 override static func ignoredProperties() -> [String] {
    return ["sections"]
  }