Ho alcune funzionalità dei dati principali che funzionavano correttamente fino a quando non sono state apportate alcune modifiche recenti (apparentemente non correlate). Ora ho problemi con tutti gli attributi che appartengono ad una particolare istanza di sottoclasse NSManagedObject che ritornano improvvisamente a zero.L'attributo Core Data cambia su nil (correlato all'ARC?)
Supponiamo che la sottoclasse NSManagedObject si chiami Foo e che abbia un solo attributo chiamato valore. Una volta compreso che il valore era in qualche modo diventato nulla, sono andato a impostare la seguente categoria per monitorare le modifiche al valore.
@implementation Foo (Debug)
- (void)setValue:(NSDate *)value
{
[self willChangeValueForKey:@"value"];
[self setPrimitiveValue:value forKey:@"value"];
[self didChangeValueForKey:@"value"];
}
- (NSDate *)value
{
[self willAccessValueForKey:@"value"];
NSDate *value = [self primitiveValueForKey:@"value"];
[self didAccessValueForKey:@"value"];
return value;
}
@end
setValue: viene chiamato per il mio oggetto e l'argomento passato è un NSDate non nullo. Quindi il valore viene recuperato (in un altro metodo). Lo stesso valore specificato è stato recuperato correttamente.
Tuttavia, quando un altro metodo tenta di leggere il valore, viene chiamato il valore accessor e un valore nil viene restituito da primitiveValueForKey :.
Tra le due letture setValue: non viene chiamato e l'oggetto Foo è ancora valido (non zero). In effetti non vengono eseguite altre operazioni di Core Data tra le due letture su qualsiasi oggetto Core Data o il contesto nel suo complesso.
Utilizziamo ARC nel nostro progetto. È possibile che ARC stia in qualche modo interferendo con le variabili dei miei dati di base e le dislocassimo? In caso affermativo qualcuno ha qualche suggerimento per il debug di deallocazioni ARC? O meglio ancora, qualcuno sa come garantire che ARC non storni la mia variabile.
Questo potrebbe non essere nemmeno correlato all'ARC, tuttavia sono un po 'in perdita su cosa sta succedendo. Qualsiasi suggerimento sarebbe molto apprezzato.
ARC è ancora sotto NDA, quindi non possiamo discuterlo fuori dai forum ristretti di Apple. – TechZen
[ARC non è sotto NDA.] (Http://lists.cs.uiuc.edu/pipermail/cfe-dev/2011-June/015588.html) –
Ogni possibilità che stai lavorando su due thread diversi con due diversi copie dell'oggetto? Altrimenti, sei sicuro che questo sia esattamente lo stesso oggetto? Che non stai facendo due? O che non hai ripristinato il tuo contesto o hai perso le tue modifiche? –