Ho problemi con l'impostazione di una proprietà temporanea nei dati principali. Il problema che sto cercando di risolvere è: ho una collezione di oggetti archiviati con successo usando Core Data. Questa raccolta è essenzialmente una raccolta di sola lettura, ma in fase di esecuzione, desidero associare un altro oggetto (una UIImage in questo caso) a ciascun elemento della raccolta. Non ho bisogno di memorizzare gli UIImages; è puramente un'associazione di runtime. Quindi quello di cui ho veramente bisogno è un 'segnaposto' in ogni oggetto nella collezione in cui posso rilasciare UIImage più tardi.Dati principali e proprietà transitorie
Un attributo transitoria sembra la cosa giusta e, per questo, i documenti di riferimento Core Data mi dicono che dovrei creare un "attributo di sovratensioni opzionale di tipo non definito" nel modello di dati che ho fatto:
Inoltre, mi viene comunicato che non è necessario definire una proprietà corrispondente nell'oggetto di implementazione ma che dovrò scrivere i metodi di accesso personalizzati & setter. Ho modellato questi metodi basati sugli esempi nella documentazione come segue:
- (void)setDisplayImage:(UIImage *)anImage {
[self willChangeValueForKey:@"displayImage"];
[self setPrimitiveValue:anImage forKey:@"displayImage"];
[self didChangeValueForKey:@"displayImage"];
}
e:
- (UIImage *)displayImage {
[self willAccessValueForKey:@"displayImage"];
UIImage *anImage = [self primitiveDisplayImage];
[self didAccessValueForKey:@"displayImage"];
if (anImage == nil) {
NSData *displayImageData = [self displayImageData];
if (displayImageData != nil) {
anImage = [NSKeyedUnarchiver unarchiveObjectWithData:displayImageData];
[self setPrimitiveDisplayImage:anImage];
}
}
return anImage;
}
C'è anche un metodo differito "write" (willSave) che ho scritto per il rigoroso completezza sebbene, come sopra, non scriverò mai più questi oggetti in negozio.
Il problema che sto ottenendo è nei metodi primitiveDisplayImage e setPrimitiveDisplayImage di - (UIImage *) displayImage {. Fondamentalmente, il compilatore lancia avvisi su questi due metodi come "l'oggetto X potrebbe non rispondere a 'primitiveDisplayImage' .." ecc. Tuttavia, la mia comprensione dai documenti è che questi primitivi accessor/setters vengono creati automaticamente - questo non sembra sii il caso Chiunque là fuori può aiutarmi a risolvere questo problema? Molte grazie