Je suis en train de déboguer un gros projet écrit par un autre développeur. Le projet utilise CoreData
dont je suis très nouveau. J'ai un crash qui se produit en raison du fait que NSManagedObject
est un défaut (j'ai une mauvaise compréhension de ce qu'est la faute) et je voudrais convertir l'object en "pas faute" et voir si cela aide. La lecture de la documentation m'a fait penser que to make object not fault
égal à to fire fault
(encore une fois j'ai une mauvaise compréhension de ce qu'est "tirer"), j'ai donc décidé de le triggersr en appelant n'importe quelle méthode hasChanges
puisque ce n'est pas dans la list des methods qui ne génèrent pas de faute. Cependant, même après avoir appelé cette méthode, l'object restait toujours en défaut. Quelqu'un peut-il me donner un exemple de la façon de convertir NSManagedObject
en état "sans faute"?
L'exception que vous avez mentionnée dans un commentaire est:
Terminating app due to uncaught exception 'NSObjectInaccessibleException', reason: 'CoreData could not fulfill a fault for '0x1f0627a0 <x-coredata://E40418A0-A8E5-4340-865F-A9DA2E0095DD/CoreObject/p288>''
Le message "ne peut pas remplir une faute" indique qu'il ne s'agit pas simplement d'un problème de triggersment de la panne. En fait, il n'y a pas d'étapes spéciales pour triggersr une panne – vous accédez simplement aux attributes, et si nécessaire, la panne se triggers automatiquement.
Ce que cette erreur vous dit, c'est que vous faites quelque chose qui provoque une erreur, mais que Core Data ne trouve aucun logging de l'instance que vous utilisez. Cela peut arriver dans certains scénarios, par exemple:
À ce stade, datatables de base utilisent normalement l'object pour searchr la valeur de l'atsortingbut. Mais vous l'avez déjà supprimé, donc datatables d'atsortingbut ont disparu. Core Data renvoie cette exception.
D'autres scénarios peuvent triggersr this– appel à la reset
sur un context d'object géré tout en conservant les objects précédemment récupérés ou en supprimant le stockage persistant (de sorte que datatables existent toujours dans le file de stockage, mais le file n'est plus chargé ). En général, cela signifie que datatables de base essaient de searchr des données sur un object qui n'est plus valide.
Qu'as tu besoin de faire:
Faulting est le process par lequel un object et / ou ses propriétés sont extraits de la database à la request.
Par exemple, si vous tentez d'accéder à une propriété ou à une relation sur un object, person.name
, cet object n'a peut-être pas ses données en memory et il doit être extrait du magasin de données sous-jacent. C'est une faute.
La faille est une partie normale du fonctionnement des données de base et ne devrait pas être liée à des plantages. Un object ne sera pas utilisé lorsque vous essaierez d'accéder à ses propriétés et relations.