Это соответствующий код в моем UIViewController
:Realm не работает после миграции
class HabitTableViewController: UIViewController, UITableViewDataSource, UITableViewDelegate{
@IBOutlet weak var habitTableView: UITableView!
private var _numOfRowsInSects: [Int] = []
private var _allSections = Set<Int>() //_[0] = 1 -> Morning
private let _timeInDay = [0: "Morning", 1: "Afternoon", 2:"Evening", 3:"Anytime"]
private var _habitsBySection:[[Habit]] = []
private var _whatIsToday = -1 //means no button other than today has been pressed
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
habitTableView.delegate = self
habitTableView.dataSource = self
var error: NSError?
NSFileManager.defaultManager().removeItemAtPath(Realm.defaultPath, error:&error)
let realm = Realm()
//for testing purposes, preload some habits
let habit1 = Habit()
let habit2 = Habit()
let habit3 = Habit()
let habit4 = Habit()
//set up code -- assigning properties and etc.
realm.write{realm.add(habit1)}
realm.write{realm.add(habit2)}
realm.write{realm.add(habit3)}
realm.write{realm.add(habit4)}
}
@IBAction func reloadTableForDay(sender: DayButton){
if sender.tag != getDayOfWeek(-1){
_whatIsToday = sender.tag
_habitsBySection = []
_allSections = []
habitTableView.reloadData()
}
else{
_whatIsToday = -1
}
}
func getHabitsForDay(daySelected: Int) -> Results<Habit> {
let daySelected = String(daySelected)
let habitsOfDay = Realm().objects(Habit).filter("durationByDay_days contains %@", "7")
return habitsOfDay
}
}
настроить данные, которые будут упорствовать в viewDidLoad()
, для целей тестирования. Однако моя функция getHabitsForDay(daySelected: Int)
возвращает результат только после запуска программы, то есть когда я нажимаю кнопки, вызывающие функцию reloadTableForDay(sender: DayButton)
, которая, в свою очередь, вызывает перезагрузку до UITable
, ничего не происходит, и в моей консоли я вижу, что запрос возвращает пустой Result<Habit>
, Все это произошло после того, как я изменил модель данных (добавил свойство и класс) и выполнил миграцию.
Я также подозреваю, что var error: NSError? NSFileManager.defaultManager().removeItemAtPath(Realm.defaultPath, error:&error)
может быть запутанным, но я не уверен.
EDIT: Теперь я уверен, что это было вызвано миграцией, так как я начал новый проект и скопировал код. Все работало нормально, пока я не перебрался.
Это код миграции в моем AppDelegate
:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
let config = Realm.Configuration(
//You need to increment the version everytime you change your object schema (starts at 0)
schemaVersion: 1,
migrationBlock: { migration, oldSchemaVersion in
//If you want to preserve any data, you can do it here, otherwise just leave it blank.
}
)
Realm.Configuration.defaultConfiguration = config
let realm = Realm()
return true
}
Я достал код миграции, и все снова сработало ... Почесывая голову сейчас .... – Liumx31