Also habe ich etwas Code, der Hintergrunddaten in meine Realm-Datenbank analysiert. Wenn ich den Aufruf ohne einen asynchronen Thread mache, benötigt die Datenbank ungefähr 10 Sekunden zum Füllen (JSON mit 1000 Einträgen) und die App bleibt während dieser Zeit stehen, weil swiftyJson langsam ist (natives JSON dauert ebenfalls etwa 2 Sekunden).Größe der Realm-Datenbank geht x100 bei Verwendung eines asynchronen Threads
Wenn ich den async Anruf hinzufüge, behebt es das Einfrieren Problem, ABER meine Datenbank ist jetzt 50 MB statt 500kb vorher .... Irgendeine Idee, was vor sich geht? Jede Hilfe ist willkommen
func loadDataForLocalCategory() {
let URL = "SomeURL"
Alamofire.request(.GET, URL).validate().responseJSON { response in
switch response.result {
case .Success:
let priority = DISPATCH_QUEUE_PRIORITY_DEFAULT
dispatch_async(dispatch_get_global_queue(priority, 0)) {
if let value = response.result.value {
let realm = try! Realm()
let json = JSON(value)
for item in json["result"].arrayValue {
let localCategory = LocalDataCategory()
localCategory.id = item["id"].intValue
// print(item["name"].stringValue)
localCategory.name = item["name"].stringValue
try! realm.write {
realm.add(localCategory,update: true)
}
}
}
}
case .Failure(let error):
print(error)
}
}
}
Danke, es hat geholfen: D so komisch, dass es auf dem Hauptthread gut funktioniert hat, und explodiert auf dem async_thread. – SoundShock
Super! Froh, dass ich helfen konnte! Haha ja, es ist genau, weil es auf einem anderen Thread ist. Realm unterhält verschiedene Kopien der gleichen Daten, so dass das Schreiben eines Threads keine Lesevorgänge auf einem anderen Thread löscht. Aber abhängig von der Anzahl der Transaktionen in separaten Threads kann dies die physische Größe auf der Festplatte beeinflussen. – TiM