Ich versuche, alle Daten von Parse zu erhalten und diese Daten mit den Core-Daten von meinem Telefon zu synchronisieren. Ich habe momentan ein kleines Problem mit einer Abrufanforderung, die nicht korrekt ausgeführt wird. Ich denke die Ursache ist, dass ich den managedObjectContext für verschiedene Aufgaben verwende, aber ich weiß nicht wirklich, wie ich das beheben kann.Fehler beim Abrufen von Objekten in den Core-Daten "- [__ NSArrayI-Entität]: nicht erkannter Selektor an Instanz gesendet"
Ich zeige deutlich in meinem Code, wo das Problem auftritt. Und es ist ziemlich seltsam, weil mein Code nicht abstürzt, aber es nur einen Fehler in das Protokoll druckt. (Ich habe die Ergebnisse, über die Log-Anzeige direkt unter dem Code)
Dies ist mein Code:
// CORE DATA UPDATE
for var i = 0; i < self.messages.count; i++ {
let entity = NSEntityDescription.entityForName("Groups", inManagedObjectContext: self.managedObjectContext)
let newGroup = Groups(entity: entity!, insertIntoManagedObjectContext: self.managedObjectContext)
newGroup.groupId = self.messages[i].groupId
newGroup.updatedAt = NSDate()
newGroup.groupName = self.messages[i].groupName
self.messages[i].imageFile.getDataInBackgroundWithBlock({ (imageData, error) -> Void in
if error == nil{
newGroup.photo = imageData
}else{
print(error)
}
})
newGroup.lastMessage = self.messages[i].message
let usersRelationship = newGroup.mutableSetValueForKey("Users")
let arrayMembers = self.dictionaryGroupIds[self.messages[i].groupId]! as [String]
print(arrayMembers)
for member in arrayMembers {
print(member)
print("CODE IS STOPPING HERE ")
// MY CODE STOPS HERE
// When I want to print the members in the arraymembers, it never displays all the member, sometimes it is only one member than it is 3 members, but never all of them so
let fetchRequest = NSFetchRequest(entityName: "Users")
fetchRequest.predicate = NSPredicate(format: "username = %@", member)
fetchRequest.returnsObjectsAsFaults = false
do {
let result = try self.managedObjectContext.executeFetchRequest(fetchRequest)
usersRelationship.addObject(result)
}catch{
let fetchError = error as NSError
print("\(fetchError), \(fetchError.userInfo)")
}
}
do {
// This get never printed to the log
print("SUCCESS")
try newGroup.managedObjectContext?.save()
} catch {
let saveError = error as NSError
print("\(saveError), \(saveError.userInfo)")
print("CRASH")
}
}
}
Dies ist, was in das Protokoll angezeigt wird:
2016-03-28 08:51:09.511 WeGrupp[1268:35749] Warning: A long-running operation is being executed on the main thread.
Break on warnBlockingOperationOnMainThread() to debug.
2016-03-28 08:51:09.823 WeGrupp[1268:35749] Warning: A long-running operation is being executed on the main thread.
Break on warnBlockingOperationOnMainThread() to debug.
["[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]"]
[email protected]
CODE IS STOPPING HERE
2016-03-28 08:51:10.140 WeGrupp[1268:35749] -[__NSArrayI entity]: unrecognized selector sent to instance 0x7fb0eb4d5c60
2016-03-28 08:51:10.143 WeGrupp[1268:35749] Warning: A long-running operation is being executed on the main thread.
Break on warnBlockingOperationOnMainThread() to debug.
Das ist also Ich denke, es hat etwas mit Concurrency zu tun, aber ich konnte leider keine Antwort auf meine Frage finden. Ich war in anderen Foren, aber niemand konnte eine richtige Antwort geben.
Vielen Dank
Haben Sie versucht zu tun, was die Warnung schlägt vor und legt eine Pause auf warnBlockingOperationOnMainThread, um zu sehen, wo es auftritt? Trotzdem vermute ich, dass das Problem darin besteht, das Foto im Hintergrund zu platzieren, wenn sich die Variable newGroup ändert. – Michael
Versuchen Sie, das Foto für CoreData beizubehalten? Es wird nicht richtig funktionieren, da es im Hintergrund geladen wird, vielleicht nachdem Sie den MOC gespeichert haben. – Michael
Danke für deine Hilfe Michael, aber könntest du genauer sagen, was du denkst, was ich tun könnte, weil ich es nicht wirklich verstehe? In der Tat, was ich versuche zu tun ist, alle Benutzer zu verknüpfen, ein Teil der Gruppe, die ich nur in den Code über diesem, in der gleichen Ansicht hinzugefügt. Weil ich eine Viele-zu-Viele-Beziehung zwischen Benutzern und Gruppen erstellt habe. Jede Gruppe hat viele Benutzer und jeder Benutzer kann so viele Gruppen haben – C00kieMonsta